Deforming sheet into conical structure

50 次查看(过去 30 天)
I am trying to deform a flat sheet into a conical structure using MATLAB. (Pls see the image below)
L = length of sheet; R= bigger radius; r = smaller radius
Here's my approach:
  1. First i create an upward ramp (as shown in the image above), with a displacement in z-direction given by:
u_1 = r/L * (pi-1) * x
2. Then curve the edges of rectangular sheet into the conical form, given by displacements:
3. Hence the net displacement of any point becomes u_1 + u_2.
I have written this as a matlab code:
for i=1:length(A)
A(i,2) = A(i,2) + (sqrt(2*A(i,3)*r - A(i,3)*A(i,3))-A(i,2))*(A(i,1)/L);
A(i,3) = A(i,3) + ((r/L)*(pi-1)*(A(i,1)) + (R-sqrt(R*R - A(i,2)*A(i,2))*(1-(A(i,1)/L))) + ((R-r)+ (2/pi)*A(i,2))*(A(i,1)/L));
A here is the matrix with initial coordinates of the flat sheet. Then using a for loop, i apply the u_1 + u_2 displacement, changing the y and z coordinates of the sheet.
However, after running the code, i get one side to be very nicely fitting the curvature of the cone, whereas on the other side, all the points coincide at one single point rather than forming a circular face. Please see the images below.
Original flat sheet
Curved conical sheet with the issue
Can someone please help me with this?

采纳的回答

William Rose
William Rose 2024-7-5
You want to map points from the x-y plane (flat sheet) to half of a conical frustrum.
The initial points are points (x1,y1) in sheet 1: x1=[0,L], y1=[-0.5,+0.5]. The final points are on half of a conical frustrum, with axis from (x2,y2,z2)=(0,0,R1) to (L,0,R1), and radius R1 at x2=0, radius R2 at x2=L. I have changed your notation somewhat, because I want to define r(x2) as a function.
The mapping from x1 to x2 is simple:
x2=x1 eq.0
The mapping from y1 to (y2,z2) is more complicated. Define a radius function:
r(x2)=R1+x2*(R2-R1)/L eq.1
Since x2=x1, we can write
r(x1)=R1+x1*(R2-R1)/L eq.2
Define angle theta as the angle measured about the cone axis, in a plane perpendicular to the axis, i.e. theta is the angle in the y-z plane. Define theta so that theta=0 when z2<0 and y2=0; theta=-pi/2 when y2<0 and z2=R; theta=pi/2 when y2>0 and z2=R.
It follows from the definition of r(x2) and theta that (r,theta) and (y2,z2) are related as follows:
y2=r(x1)*sin(theta) eq.3
z2=R1-r(x1)*cos(theta) eq.4
Now we choose to map y1 (domain=-0.5 to +0.5) to theta (range -pi/2 to +pi/2).
theta=pi*y1 eq.5
Substitute eq.2 and eq.5 into eq.3:
y2=(R1+x1*(R2-R1)/L)*sin(pi*y1) eq.6
Substitute eq.2 and eq.5 into eq.4:
z2=R1-(R1+x1*(R2-R1)/L)*cos(pi*y1) eq.7
Equations 0, 6, and 7 completely define the mapping from the sheet to the conical frustrum.
In Matlab:
L=1; R1=0.5; R2=0.2;
x1=L*(0:1/6:1); y1=-0.5:0.1:0.5;
[X1,Y1]=meshgrid(x1,y1);
X2=X1;
Y2=(R1+X1*(R2-R1)/L).*sin(pi*Y1);
Z2=R1-(R1+X1*(R2-R1)/L).*cos(pi*Y1);
% Plot results
figure;
colr=['k','r','g','b','c','m','y'];
subplot(211)
for i=1:7
plot3(X1(:,i),Y1(:,i),zeros(length(y1),1),'*','Color',colr(i)); hold on
end
axis equal; grid on; view(45,20); zlim([0 R1])
xlabel('X1'); ylabel('Y1'); zlabel('Z1')
subplot(212)
for i=1:7
plot3(X2(:,i),Y2(:,i),Z2(:,i),'*','Color',colr(i)); hold on
end
axis equal; grid on; view(45,20)
xlabel('X2'); ylabel('Y2'); zlabel('Z2')
It seems to work.
  17 个评论

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Colormaps 的更多信息

标签

产品


版本

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by