I need to draw arc through three points in three-dimensional space. Can you please help me out?
조회 수: 2 (최근 30일)
이전 댓글 표시
x_i = [0,5,20];
y_i = [0,0,0];
z_i = [20,5,0];
P1 = [x_i(1);y_i(1);z_i(1)]
P2 = [x_i(2);y_i(2);z_i(2)]
P3 = [x_i(3);y_i(3);z_i(3)]
v1 = cross(P2-P1,P3-P1);
v1 = v1/norm(v1)
syms x y z
P0 = [x;y;z];
eqn1 = dot(P0-P1,v1) == 0
eqn2 = dot(P0-(P2+P1)/2,P2-P1) == 0
eqn3 = dot(P0-(P3+P1)/2,P3-P1) == 0
[A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x, y, z])
P_centre = linsolve(A,B)
Can you please tell me where I am going wrong?
댓글 수: 8
채택된 답변
Matt J
2022년 10월 21일
편집: Matt J
2022년 10월 21일
I would suggest this FEX download,
x_i = [0,5,20];
y_i = [0,0,0];
z_i = [20,5,0];
P1 = [x_i(1),y_i(1),z_i(1)];
P2 = [x_i(2),y_i(2),z_i(2)];
P3 = [x_i(3),y_i(3),z_i(3)];
pfit=planarFit([P1;P2;P3]');
xy=pfit.R(:,2:3)'*pfit.XYZ;
cfit=circularFit(xy);
C=cfit.sample(0:360);
XYZ =num2cell( pfit.R(:,2)*C{1} + pfit.R(:,3)*C{2} + pfit.normal'*pfit.distance ,2);
scatter3(x_i,y_i,z_i,'filled','r','SizeData',50);
line(XYZ{:}); axis equal
xlabel x, ylabel y, zlabel z
댓글 수: 2
Matt J
2022년 10월 22일
편집: Matt J
2022년 10월 22일
pfit=planarFit([P1;P2;P3]');
xy=pfit.R(:,2:3)'*pfit.XYZ;
cfit=circularFit(xy);
xy=xy-cfit.center';
t1=atan2d(xy(2,1),xy(1,1));
t2=atan2d(xy(2,3),xy(1,3));
C=cell2mat(cfit.sample(linspace(t1,t2)));
XYZ = num2cell( pfit.R(:,2)*C(1,:) + pfit.R(:,3)*C(2,:) + pfit.normal'*pfit.distance ,2);
scatter3(x_i,y_i,z_i,'filled','r','SizeData',50);
line(XYZ{:}); axis equal
xlabel x, ylabel y, zlabel z
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Calculus에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!