Actionscript 3 寻找直线与非线性路径相交的点

Actionscript 3 寻找直线与非线性路径相交的点,actionscript-3,geometry,collision-detection,trigonometry,intersection,Actionscript 3,Geometry,Collision Detection,Trigonometry,Intersection,图表: 小结:我如何在图中找到蓝点的坐标,以便计算与之相邻的红点的位置并绘制三角形 问题详情: 我正在尝试为我正在制作的地图应用程序在一个可拖动的工具提示气球上制作一个尾巴。我希望尾部从放置引出序号的位置(包含引出序号和尾部的精灵的点0,0)绘制到引出序号的边缘,尾部的底部始终与它连接到引出序号的任意宽度相同。每帧都会在新的坐标处重新绘制尾部 我不想把尾巴的一部分藏在气球下面,因为我打算在气球上使用一些透明度 如果路径是圆或椭圆,我可以使用greensock运动路径库CirclePath2D类的

图表:

小结:我如何在图中找到蓝点的坐标,以便计算与之相邻的红点的位置并绘制三角形

问题详情: 我正在尝试为我正在制作的地图应用程序在一个可拖动的工具提示气球上制作一个尾巴。我希望尾部从放置引出序号的位置(包含引出序号和尾部的精灵的点0,0)绘制到引出序号的边缘,尾部的底部始终与它连接到引出序号的任意宽度相同。每帧都会在新的坐标处重新绘制尾部

我不想把尾巴的一部分藏在气球下面,因为我打算在气球上使用一些透明度

如果路径是圆或椭圆,我可以使用greensock运动路径库CirclePath2D类的angleToProgress方法(以及一些trig),我可以放置一个隐藏的路径跟随器并获得它的xy。。。但是我使用的是圆形反射角。。。所以我在想一个更好的方法是在一条线和它穿过围绕气球周长绘制的路径的任何地方之间进行某种碰撞检测。但是,我找不到任何返回碰撞xy的碰撞函数

所以我被难住了。我在想,在AS3中使用内置的碰撞方法可能不容易实现我想要做的事情。有没有一个碰撞库可以让我这样做,或者,也许更好的是,有一些数学让我无法理解?因为这似乎是我想的太多了,不应该这么难


[注意:我无法插入图表,因为我没有足够的声誉。]

如果蓝色交点位于其中一个圆角上,你会怎么做?除此之外,这应该很容易弄清楚-你可以做简单的线几何和键检查,看看线与构成长方体边界的四条无限线相交的地方,然后确定哪条实际上是毕达哥拉斯线长度的第一个交点


如果使用此方法,则需要检查放置相对于引出序号边的位置,以跳过计算明显错误(有时不存在)的交点(例如,如果引出序号中心位于放置点的正西面,则应跳过计算垂直线的交点)。事实上,您可以使用类似的逻辑跳过2边或3边,具体取决于几何体。

考虑到这里的角点情况(ha),您可能只需要像我上面描述的那样,对一个虚拟的非圆盒进行操作,然后如果交点在一个角点的圆角半径范围内,然后可能只是把红点放在一些简单的预定位置。看来会有用的。我明天得花点时间研究一下你提出的理论。至于角点,我会在周长上添加点,并将它们沿周长按周长的百分比移动。我可以使用greensock的MotionPath类和PathFollowers来实现这一点。然后我会抓取这些点的xy值——因为它们实际上是我可以得到参考的精灵——然后用这些值来画我的三角形。我不确定我是否理解你的意思。我的意思是,如果气泡中心和放置点之间的线穿过圆角,而不是边缘的直线部分,那么行为就有点不同了。为什么不画一个完整的三角形到中心点,然后画一个相同尺寸的圆形矩形作为三角形的遮罩呢?实际上我已经在做了,无遮罩。我曾考虑过掩盖它,但想避免它,因为我无法摆脱这里有东西要学的感觉。如果你走数学路线,会涉及到很多技巧。有两个项目可以查看矩形和角的圆。通过知道矩形的高度和宽度以及角的半径,您应该能够计算所有必要的点。但您也会遇到舍入问题,因此它永远不会是像素完美的,有时会出现重叠或1像素的间距。