Запуск приведенного ниже кода приводит к двум наборам решений. Для одного набора решений оба значения z будут> = 0 (39,4962 и 0). Для другого набора решений одно значение z будет <0 (-39,4962 и 0). </p>
Если я включу строки "acceptAlso", которые в настоящее время закомментированы, решения не даются. Это не то, что я ожидал; Я предполагал, что только второй набор решений будет дисквалифицирован, поскольку первое решение не противоречит предположениям.
Может ли кто-нибудь просветить меня, почему это происходит? Заранее спасибо.
points = [0.368,0.02,2.3 ; -0.536,-0.108,2.3];
d = 40;
syms x1 y1 z1 x2 y2 z2 real
% assumeAlso(z1 >= 0)
% assumeAlso(z2 >= 0)
% Conditions L1 must satisfy
line1 = [
x1/points(1,1) == y1/points(1,2)
y1/points(1,2) == z1/points(1,3)
];
% Conditions L2 must satisfy
line2 = [
x2/points(2,1) == y2/points(2,2)
y2/points(2,2) == z2/points(2,3)
];
distance = [
( (x1-x2).^2 + (y1-y2).^2 + (z1-z2).^2 ) == d.^2
];
solved = solve([line1,line2,distance],[x1,y1,z1,x2,y2,z2]);
disp([
eval([solved.x1 solved.y1 solved.z1])
eval([solved.x2 solved.y2 solved.z2])
])