有没有一种简单的方法来近似两个实例的点(如果有)QuadCurve2D
相交?
也就是说,我如何计算图中红点的坐标?没有明显的方法QuadCurve2D
去做这个。
(注意:这些点并不准确,因为我已经为图表手动调整了它们。另请注意“缺失”的第四个点,它不位于曲线段上,即使它位于(无限)抛物线上。)
这两个曲线段是使用以下代码创建的:
QuadCurve2D curve1 = new QuadCurve2D.Double(-2.00, -2.00, +0.75, +4.75, +2.00, -0.75);
QuadCurve2D curve2 = new QuadCurve2D.Double(-2.50, -0.75, +5.50, -0.50, +0.50, +1.25);
注 2:我还希望能够与直线和二次曲线相交,但我认为可以通过将控制点之一设置为与端点共线来处理。
取决于您是否对近似解或精确解(最高双精度)感兴趣。对于近似曲线,您可以简单地将曲线参数化为某个函数 f(t),然后进行一些区间嵌套以查找以下值t最大限度地减少曲线之间的距离。
对于精确的解决方案,您必须找到两个圆锥曲线相交的四个点。有一小段是关于这个的在维基百科上 http://en.wikipedia.org/wiki/Conic_section#Intersecting_two_conics。这本书射影几何的观点 https://rads.stackoverflow.com/amzn/click/com/3642172857有一个较长的部分解释细节。当然有适用于各种语言的实现;这渐近线之一 http://www.piprime.fr/files/asymptote/geometry/modules/geometry.asy.html#intersectionpoints%28conic,conic%29我现在就想到了。其实施一般情况 http://www.piprime.fr/files/asymptote/geometry/modules/geometry.asy.html#intersectionpoints%28bqe,bqe%29不过看起来很可怕,所以他们可能在那里做了一些过于复杂的事情。
获得所有四个交点后,您仍然需要确定其中哪一个位于由四边形曲线端点界定的圆锥曲线部分上,但这相比之下应该很简单。总的来说,您需要执行以下三个步骤:
- 计算端点和控制点的圆锥截面矩阵
- 使用铅笔中的简并元素与圆锥曲线相交
- 确定这些交点是否位于端点之间
如果您对这些步骤之一的数学细节有疑问,最好在数学堆栈交换 https://math.stackexchange.com/。那里的人们不仅拥有更多解决数学问题的经验,而且用于排版数学的 MathJax 功能将使答案比此处的答案更具可读性。
至于你关于直线的注释2:到目前为止,这更容易,因为如果你用坐标来表达这个问题,你最终只会得到一个二次方程,而不是一个4次方程,用于简单的方法一般问题,如果按照上述参考文献的描述解决它,仍然是 3 级。人们可以用这样一种方式编写一般方法,即圆锥曲线与直线相交是解决方案中的一个步骤,因此拥有一种方法可能会足够有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)