Deforming sheet into conical structure
48 ビュー (過去 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:
- 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?
0 件のコメント
採用された回答
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 Center および File Exchange で Colormaps についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!