Deforming sheet into conical structure

50 views (last 30 days)
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?

Accepted Answer

William Rose
William Rose on 5 Jul 2024
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 Comments

Sign in to comment.

More Answers (0)

Categories

Find more on Colormaps in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!