谢谢,我是想问一下如果是在空间直角坐标系中的话该怎么解决,就是再引入一个z
追答AB两个点只能决定线,无法决定平面,所以如果ABC还是共线的化,答案仍然还是两个点。
所以结果是空间直线和球体的交点问题。
只要参考二维的就行,程序如下:
clear;
clc
A_x = input('输入点A的x坐标:');
A_y = input('输入点A的y坐标:');
A_z = input('输入点A的z坐标:');
B_x = input('输入点B的x坐标:');
B_y = input('输入点B的y坐标:');
B_z = input('输入点B的z坐标:');
R = input('输入BC间距离:');
syms x y z
eq1 = (x-A_x)/(B_x-A_x)*(B_y-A_y)+A_y-y;
eq1 = subs(eq1);
eq2 = (x-A_x)/(B_x-A_x)*(B_z-A_z)+A_z-z;
eq2 = subs(eq2);
eq3 = (x-B_x)^2+(y-B_y)^2+(z-B_z)^2-R^2;
eq3 = subs(eq3);
[x,y,z]=solve(eq1,eq2,eq3);
x = double(x);
y = double(y);
z = double(z);
fprintf('第一个可能点是(%f,%f,%f)\n',x(1),y(1),z(1))
fprintf('第二个可能点是(%f,%f,%f)\n',x(2),y(2),z(2))
结果:
输入点A的x坐标:0
输入点A的y坐标:0
输入点A的z坐标:0
输入点B的x坐标:1
输入点B的y坐标:1
输入点B的z坐标:1
输入BC间距离:2
第一个可能点是(2.154701,2.154701,2.154701)
第二个可能点是(-0.154701,-0.154701,-0.154701)
太感谢了,恩就是空间中的两点共线,我还想问下有没有办法直接得出一个坐标而不是两个坐标,因为方向是A到B到C,所以能不能程序直接实现的到C的固定坐标,谢谢~
我试了一下,结果是图片上的那样
简单,你把最后两行换成如下:
tip = (x-B_x)*(B_x-A_x)>0; %%%% A到B到C,因此C_x-B_x和B_x-A_x同号
fprintf('所求C点是(%f,%f,%f)\n',x(tip),y(tip),z(tip))
不可能错误啊,我这都调试过了,你用哪个版本MATLAB,是不是放在m文件中运行的?
我的版本是2014a,我就运行了下面这段,就报了图片上的那个错