我有一些3D参数方程式,我用matlab / octave绘制,想要找出它们相交的地方,我该怎样才能做到这一点。请注意,这只是一个简单的例子,我计划让多个参数方程相交。
我要做的是在交叉点开始和结束每个地块。
我的第一个想法是将(t)处的所有交叉点放入一个数组并绘制我想要的那些我无法弄清楚如何在(t)找到交叉点
下面的示例matlab / octave代码:
clear all, clf
t = 0:pi/60:2.45*pi;
plot3 ((t).*cos(t), (t).*sin(t), (t),'b*');
hold on
plot3 ((t).*sin((t)), (t).*cos((t)), (t),'r');
这是一个箭头指向交叉点的图像
答案 0 :(得分:0)
我说如果可能的话,最好是解析性地解决这个方程组。
看看,你的原始代码(只是改变了绘制的线条样式)
clear all, clf
t = 0:pi/60:2.45*pi;
plot3 ((t).*cos(t), (t).*sin(t), (t),'*b-');
hold on
plot3 ((t).*sin((t)), (t).*cos((t)), (t),'or-');
我在其中一个十字路口有这张照片:
它很好,因为这两个图在一个绘图点上完全相互交叉。
现在考虑以下情况。我把你的第二行改为
t = 0:0.05:2.45*pi;
现在我在交叉点看到了这一点:
现在,在一般情况下为t
参数的不同值生成的两条3D多边形线将不具有任何公共点。如此简单地检查这些线性段的交叉将失败。
如果你将方程式更新为更复杂的方程式(t
更复杂的依赖性,那么同样的事情将会发生(否则你真的很幸运)。
分析解决方案(如果可能的话)将是无与伦比的。
作为这样做的数值方式,考虑从一条线上的任意点P1(x1(t1),y1(t1),z1(t1))到任意点P2(x2(t2),y2)的距离D. (t2),z2(t2))在另一个上。然后找到D的最小值作为两个独立参数t1和t2的函数。如果D最小为零(或非常接近于零),则这两条线相交。否则他们只是互相传递。