2

我在 Raphael.js 中有一条贝塞尔曲线的路径。两条线与这条路径相交。我可以得到与 相交的点Raphael.pathIntersection()。不过,我想获取这两点之间的子路径的路径字符串。Raphael.getSubPath() 需要知道沿路径的位置,但我不知道这些位置,只知道绝对点。如何获取这些交叉点的​​位置以便找到子路径?

谢谢

编辑:下面是为构成我要查找的子路径的开始和结束的两个交叉点中的第一个返回的交叉点对象。我可以从中看到交叉点发生在哪个路段,但是如何从该信息开始从路径获取实际位置?

0: Object
  bez1: Array[8]
    0: 746.6695658365885
    1: 444.9913024902344
    2: 746.6695658365885
    3: 444.9913024902344
    4: 767.3333333333334
    5: 383
    6: 767.3333333333334
    7: 383
  bez2: Array[8]
    0: 743
    1: 427
    2: 750
    3: 428.5
    4: 752.5
    5: 428.8333333333333
    6: 761
    7: 432
  segment1: 1
  segment2: 9
  t1: 0.330626006717131
  t2: 0.5304347826090153
  x: 751.9768115942079
  y: 429.0695652173915
4

2 回答 2

2

实际上 pathIntersection 还将相交路径上的位置作为返回对象中的 t1 和 t2 返回,而不仅仅是绝对位置。

于 2013-05-15T14:07:24.980 回答
1

对不起,我想我听不懂英语,所以在以下情况下:

       _|_________
       \|
        |\
        | \
        |  \
 _______|___\
        |

(不能在此处发布图,希望您理解)使用 Raphael.pathIntersection(),它会返回类似于以下内容的内容:

0: Object
    bez1: Array[8]
    bez2: Array[8]
    segment1: 1
    segment2: 1
    t1: 0.49131376884437716
    t2: 4.686749827219845e-13
    x: 221.6492901831065
    y: 425.40404348103067
    __proto__: Object
1: Object
    bez1: Array[8]
    bez2: Array[8]
    segment1: 2
    segment2: 1
    t1: 0.9999999999901484
    t2: 1
    x: 281.50000000000495
    y: 325.3666666666513
    __proto__: Object
2: Object
    bez1: Array[8]
    bez2: Array[8]
    segment1: 3
    segment2: 1
    t1: 5.420619967753905e-13
    t2: 0.9999999999989502
    x: 281.49999999999204
    y: 325.3666666666728
    __proto__: Object
    length: 3
__proto__: Array[0]

每个相交段的子路径可以通过这些段上的子路径一一获取,分别为Raphael.getTotalLength和Raphael.getSubpath

        |
        |
        |
        | 
        |  
        |___
        |

        |
       \|
        |\
        | \
        |  \
        |   \
        |

       _|
        |
        |
        | 
        |  
        |   
        |

他们将这些子路径合并为一个以获得最终路径?

       _|
       \|
        |\
        | \
        |  \
        |___\
        |
于 2015-03-04T03:30:19.023 回答