I need to draw arc through three points in three-dimensional space. Can you please help me out?
2 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Matt J
on 21 Oct 2022
Edited: Matt J
on 21 Oct 2022
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 Comments
Matt J
on 22 Oct 2022
Edited: Matt J
on 22 Oct 2022
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
More Answers (0)
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!