how do i generate a torus?

조회 수: 87 (최근 30일)
NurFadhilah Samsuddin
NurFadhilah Samsuddin 2021년 1월 11일
편집: John D'Errico 2021년 1월 11일
hi, can someone please help me on how to generate a torus. i did my code as follows and obtained the figure below but i have no idea how to generate a torus. thank you.
clc
clear all
close all
%control point for first surface
P0 = [6 4 0]; P1 = [8 2 0]; P2 = [8 2 1]; P3 = [6 4 1];
P4 = [6 6 0]; P5 = [8 8 0]; P6 = [8 8 1]; P7 = [6 6 1];
P8 = [4 6 0]; P9 = [2 8 0]; P10 = [2 8 1]; P11 = [4 6 1];
P12 = [4 4 0]; P13 = [2 2 0]; P14 = [2 2 1]; P15 = [4 4 1];
phi=1;%scaling factor
B1=-1;%shape parameter lambda
B2=-1;%shape parameter miu
G17=phi*((2+B1)/(2+B2))*(P3-P2)+P3
G21=phi*((2+B1)/(2+B2))*(P7-P6)+P7
G25=phi*((2+B1)/(2+B2))*(P11-P10)+P11
G29=phi*((2+B1)/(2+B2))*(P15-P14)+P15
%control point for second surface
P3; G17; P18 = [4 6 0]; P19 = [6 4 0];
P7; G21; P22 = [4 4 0]; P23 = [6 6 0];
P11; G25; P26 = [6 4 0]; P27 = [4 6 0];
P15; G29; P30 = [6 6 0]; P31 = [4 4 0];
%control point for third surface
%P44 = [6 -2 0]; P45 = [4 0 0]; P46 = [4 0 1]; P47 = [6 -2 1];
%P32 = [8 -4 0];P33 = [2 2 0]; P34 = [2 2 1]; P35 = [8 -4 1];
%P36 = [6 0 0];P37 = [4 -2 0]; P38 = [4 -2 1]; P39 = [6 0 1];
%P40 = [8 2 0];P41 = [2 -4 0]; P42 = [2 -4 1]; P43 = [8 2 1];
%G56=phi*((2+B1)/(2+B2))*(P47-P46)+P47
%G57=phi*((2+B1)/(2+B2))*(P35-P34)+P35
%G58=phi*((2+B1)/(2+B2))*(P39-P38)+P39
%G59=phi*((2+B1)/(2+B2))*(P43-P42)+P43
%control point for fourth surface
%P47;G56;P48 = [8 -4 0]; P49 = [6 -2 0];
%P35;G57;P50 = [14 -10 0]; P51 = [8 -4 0];
%P39;G58;P52 = [8 2 0]; P53 = [6 0 0];
%P43;G59;P54 = [14 8 0]; P55 = [8 2 0];
Gx=[P0(1) P1(1) P2(1) P3(1);P4(1) P5(1) P6(1) P7(1);P8(1) P9(1) P10(1) P11(1);P12(1) P13(1) P14(1) P15(1)];
Gy=[P0(2) P1(2) P2(2) P3(2);P4(2) P5(2) P6(2) P7(2);P8(2) P9(2) P10(2) P11(2);P12(2) P13(2) P14(2) P15(2)];
Gz=[P0(3) P1(3) P2(3) P3(3);P4(3) P5(3) P6(3) P7(3);P8(3) P9(3) P10(3) P11(3);P12(3) P13(3) P14(3) P15(3)];
Gx1=[P3(1) G17(1) P18(1) P19(1);P7(1) G21(1) P22(1) P23(1);P11(1) G25(1) P26(1) P27(1);P15(1) G29(1) P30(1) P31(1)];
Gy1=[P3(2) G17(2) P18(2) P19(2);P7(2) G21(2) P22(2) P23(2);P11(2) G25(2) P26(2) P27(2);P15(2) G29(2) P30(2) P31(2)];
Gz1=[P3(3) G17(3) P18(3) P19(3);P7(3) G21(3) P22(3) P23(3);P11(3) G25(3) P26(3) P27(3);P15(3) G29(3) P30(3) P31(3)];
%Gx2=[P44(1) P45(1) P46(1) P47(1);P32(1) P33(1) P34(1) P35(1);P36(1) P37(1) P38(1) P39(1);P40(1) P41(1) P42(1) P43(1)];
%Gy2=[P44(2) P45(2) P46(2) P47(2);P32(2) P33(2) P34(2) P35(2);P36(2) P37(2) P38(2) P39(2);P40(2) P41(2) P42(2) P43(2)];
%Gz2=[P44(3) P45(3) P46(3) P47(3);P32(3) P33(3) P34(3) P35(3);P36(3) P37(3) P38(3) P39(3);P40(3) P41(3) P42(3) P43(3)];
%Gx3=[P47(1) G56(1) P48(1) P49(1);P35(1) G57(1) P50(1) P51(1);P39(1) G58(1) P52(1) P53(1);P43(1) G59(1) P54(1) P55(1)];
%Gy3=[P47(2) G56(2) P48(2) P49(2);P35(2) G57(2) P50(2) P51(2);P39(2) G58(2) P52(2) P53(2);P43(2) G59(2) P54(2) P55(2)];
%Gz3=[P47(3) G56(3) P48(3) P49(3);P35(3) G57(3) P50(3) P51(3);P39(3) G58(3) P52(3) P53(3);P43(3) G59(3) P54(3) P55(3)];
N=20;
t=(1:N)'/N;
p=(pi/2)*t;
T=[p.^0 sin(p) (sin(p).^2) (sin(p).^3) cos(p) (cos(p).^2) (cos(p).^3)];
A=[1 0 0 1;
-(B1+2) (2+B1) 0 0;
((2*B1)+1) -(2+2*B1) 0 0;
-B1 B1 0 0;
0 0 2+B2 -(B2+2);
0 0 -((2*B2)+2) ((2*B2)+1);
0 0 B2 -B2];
TT=transpose(T);
AA=transpose(A);
z1 = T*A*Gx*AA*TT;
z2 = T*A*Gy*AA*TT;
z3 = T*A*Gz*AA*TT;
z4 = T*A*Gx1*AA*TT;
z5 = T*A*Gy1*AA*TT;
z6 = T*A*Gz1*AA*TT;
%z7 = T*A*Gx2*AA*TT;
%z8 = T*A*Gy2*AA*TT;
%z9 = T*A*Gz2*AA*TT;
%z10 = T*A*Gx3*AA*TT;
%z11 = T*A*Gy3*AA*TT;
%z12 = T*A*Gz3*AA*TT;
X = [z1 z4];
Y = [z2 z5];
Z = [z3 z6];
X1 =[z4 z1];
Y1 =[z5 z2];
Z1 =[z6 z3];
%X2 = [z7 z10];
%Y2 = [z8 z11];
%Z2 = [z9 z12];
%X3 =[z10 z7];
%Y3 =[z11 z8];
%Z3 =[z12 z9];
scatter3([P0(1),P1(1),P2(1),P3(1),P4(1),P5(1),P6(1),P7(1),P8(1),P9(1),P10(1),P11(1),P12(1),P13(1),P14(1),P15(1)],[P0(2),P1(2),P2(2),P3(2),P4(2),P5(2),P6(2),P7(2),P8(2),P9(2),P10(2),P11(2),P12(2),P13(2),P14(2),P15(2)],[P0(3),P1(3),P2(3),P3(3),P4(3),P5(3),P6(3),P7(3),P8(3),P9(3),P10(3),P11(3),P12(3),P13(3),P14(3),P15(3)],'filled','MarkerFaceColor',[1 0 0]);hold on
scatter3([P3(1),G17(1),P18(1),P19(1),P7(1),G21(1),P22(1),P23(1),P11(1),G25(1),P26(1),P27(1),P15(1),G29(1),P30(1),P31(1)],[P3(2),G17(2),P18(2),P19(2),P7(2),G21(2),P22(2),P23(2),P11(2),G25(2),P26(2),P27(2),P15(2),G29(2),P30(2),P31(2)],[P3(3),G17(3),P18(3),P19(3),P7(3),G21(3),P22(3),P23(3),P11(3),G25(3),P26(3),P27(3),P15(3),G29(3),P30(3),P31(3)],'filled','MarkerFaceColor',[1 0 0]);hold on
surf(X,Y,Z)
hold on;
surf(X1,Y1,Z1)
hold on;
%surf(X2,Y2,Z2);
%hold on;
%surf(X3,Y3,Z3);
%hold on;

답변 (1개)

John D'Errico
John D'Errico 2021년 1월 11일
편집: John D'Errico 2021년 1월 11일
WAY too much effort here to generate a torus. Start here:
[theta,phi] = meshgrid(linspace(0,2*pi,50));
r = 2;
R = 5;
x = (R + r*cos(theta)).*cos(phi);
y = (R + r*cos(theta)).*sin(phi);
z = r*sin(theta);
surf(x,y,z)
shading interp
colormap hot
axis equal
Essentially, define the torus in parametric form, remapping a rctangular grid into the surface of a torus.

Community Treasure Hunt

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

Start Hunting!

Translated by