在Matlab

时间:2018-02-28 00:42:00

标签: matlab geometry computational-geometry

我有一个几何问题,如下图所示, enter image description here

我准备了右上角显示的问题草图。基本上,从C点开始,或在草图中用M表示,我想:

  1. 测量L2,即点C到相关极点(黑线)的距离。 C的坐标是已知的。极点基本上来自原点,即{0,0}每隔30度向外移动360度。极点将始终与其坐标也已知的蓝点相交。
  2. 测量L1,其是从原点到从L3与蓝色曲率之间的交点的距离获得的点的距离。这很难解释,但我希望草图能有所帮助。
  3. 如何使用Matlab解决这个问题?

    下面是数字数据集

    对于蓝点(在图中标记为“实际”)

    Theta(deg)      x          y
    ================================
           0    1.0148         0
       20.0000    0.9397    0.3420
       40.0000    0.8042    0.6748
       60.0000    0.5727    0.9919
       80.0000    0.2073    1.1757
      100.0000   -0.2073    1.1757
      120.0000   -0.5727    0.9919
      140.0000   -0.8042    0.6748
      160.0000   -0.9397    0.3420
      180.0000   -1.0148         0
      200.0000   -0.9397   -0.3420
      220.0000   -0.8042   -0.6748
      240.0000   -0.5727   -0.9919
      260.0000   -0.2073   -1.1757
      280.0000    0.2073   -1.1757
      300.0000    0.5727   -0.9919
      320.0000    0.8042   -0.6748
      340.0000    0.9397   -0.3420
      360.0000    1.0148         0
    

    标记为“预测”的那个

       x-pred     y-pred
    ===========================
        1.0953    0.2897
        1.0292    0.6399
        0.8390    0.9013
        0.5476    1.1899
        0.1902    1.2300
       -0.1902    1.3091
       -0.5476    1.0693
       -0.8390    0.9247
       -1.0292    0.4744
       -1.0953    0.2070
       -1.0292   -0.2885
       -0.8390   -0.5168
       -0.5476   -0.8711
       -0.1902   -0.9193
        0.1902   -1.0086
        0.5476   -0.8278
        0.8390   -0.6483
        1.0292   -0.3125
        1.0953   -0.0000
    

    任何想法都将受到赞赏。

    提前致谢。

1 个答案:

答案 0 :(得分:2)

第1步:找到要点BD

D是蓝色曲线中的线段与光线AC相交的点。要找到光线和线段之间的交点,我们可以执行以下操作。给定我们称之为p1p2的线段的端点上的点以及从A开始并经过C的光线,我们求解向量方程{{ 1}}用于标量p1 + t1*(p2-p1) == A + t2*(C-A)t1t2t1的值告诉我们是否存在交叉点以及交叉点发生的位置。

  • 当且仅当t2t2 >= 0
  • 时才会有交集
  • 如果有交叉点,则会发生在0 <= t1 <= 1

D = p1 + t1*(p2-p1)只是其中一个点,Bp1,具体取决于所使用的符号。

代码:

p2

第2步:计算% Assuming C and A are represented as 1x2 matrices. % Assuming blue is an Nx2 matrix containing the x-y coordinates of % the points in the blue curve in order of increasing theta. % Search for intersecting line segment to find B and D N = size(blue,1); for bidx = 1:N p1 = blue(bidx,:); p2 = blue(mod(bidx,N)+1,:); % solve for t1 and t2 t = [(p2-p1).' (A-C).']\((A-p1).'); % if we find intersection we are done. if t(2) >= 0 && t(1) >= 0 && t(1) <= 1 D = p1 + t(1)*(p2-p1); B = p2; break; end end L1

L2是与L2正交的AC的组件。

AB是与L1平行的AD的组件。

使用此知识计算ABL1,如下所示......

L2