【问题标题】:finding the intersection where multiple 3D parametric equations meet找到多个 3D 参数方程相交的交点
【发布时间】:2013-05-18 11:17:12
【问题描述】:

我有一些在 matlab/octave 中绘制的 3D 参数方程,我想知道它们在哪里相交,我该怎么做。请注意,这只是一个简单的示例,我计划让多个参数方程相交。

我想要做的是在一个交叉点开始和结束每个情节。

我的第一个想法是将 (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'); 

这是一个箭头指向相交点的图像

【问题讨论】:

    标签: matlab math octave intersection


    【解决方案1】:

    我会说,如果可能的话,最好通过解析求解这个方程组。

    看,用你的原始代码(只是绘制的线条样式被改变了)

    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 至少为零(或非常接近于零),则这两条线相交。否则他们只是互相通过。

    【讨论】:

    • 小心不要错过任何解决方案!也许你可以在一个足够细化的 3D 矩阵中累积地“绘制”你的函数。在结果值 > 1 的任何时候,您都可以开始上面介绍的 D 最小化。这取决于您的资源和您的要求:-)
    • 请原谅我,但是我将如何编程 matlab/octave 来做到这一点,而不会停留在第一个解决方案上。 matlab / octave 不会在找到的第一个解决方案处停止吗?
    • 我将尝试说明一个变量函数的可能算法。在 F(x) 达到最小值的点,它的一阶导数为零,二阶导数应为正(因此该点附近的函数图是“上凹”,请参阅en.wikipedia.org/wiki/Second_derivative)。这也适用于两个变量的函数。您可以检查这些条件以估计您有多少潜在的交叉点并围绕它们运行更复杂的算法。
    猜你喜欢
    • 2020-09-22
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2015-08-30
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多