matlab知道三个三维空间点的坐标,如何绘制经过这三个点的园,要求显示出空间直角坐标系。急,在线坐等! 5

三个空间点的坐标分别是:P1=[x1,y1,z1]P2=[x2,y2,z2]P3=[x3,y3,z3]... 三个空间点的坐标分别是:
P1 = [x1, y1, z1]
P2 = [x2, y2, z2]
P3 = [x3, y3, z3]
展开
 我来答
dukinkin
2014-05-30 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2443
采纳率:90%
帮助的人:996万
展开全部

%P1=[x1,y1,z1];

%P2=[x2,y2,z2];

%P3=[x3,y3,z4];


%P=[P1;P2;P3];

%   | x1  y1  z1 |

%P =| x2  y2  z2 |

%   | x3  y3  z3 |

P=rand(3);%三点的xyz坐标正好是合拼成3x3的矩阵,这里用3x3的随机矩阵测试

%利用随机数生成3个点的坐标

%实际使用中,将已知的三点坐标按上述顺序排成P矩阵既可以了


A=diff(P);

n=cross(A(1,:),A(2,:)); %n是三点组成的平面的法向量


if all(n==0),error('not a triangle');end %如果n是0向量,表示三点共线

A=[A;n];                  %从三点坐标很容易求得三点平面所在的方程

B=sum(diff(P.^2),2)/2;    %而外接圆心都各点距离相等,又可以列几条方程

B=[B;dot(n,P(1,:))];      %将方程联立可以解得圆心坐标cc

cc=(A\B)';                %这里有个复杂的推导过程,

                   %最终结果cc(1) cc(2) cc(3)就是圆心的x,y,z坐标

r=sqrt(sum((cc-P(1,:)).^2)); %点cc到任意一点的距离都可以求出圆的半径;


C1=P(1,:)-cc;                    %第一点到圆心的向量C1

C2=cross(C1,n./sqrt(sum(n.^2))); %C2是三点所在平面内与C1垂直的向量

theta=(0:360)';%画圆所需的角度采样间隔,0到360度,间隔可以自己根据需要调整

cirxyz=repmat(cc,[length(theta) 1])+cosd(theta)*C1+sind(theta)*C2;

%cirxyz是361x3的矩阵,3列分别是圆上每点的x,y,z坐标


plot3(P(:,1),P(:,2),P(:,3),'ko');grid on;hold on; %画出三点

plot3(cirxyz(:,1),cirxyz(:,2),cirxyz(:,3),'r-');hold off; %画出圆



以下是某次空间随机三点和他们的外接圆图像

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式