迭代发现由三个点描述的弧上的点的算法

时间:2015-03-20 19:22:47

标签: algorithm interpolation

我正在编写一个图形应用程序,需要计算并显示沿曲线弧的点列表,该点由三点描述。

让我们说我们有分(1,1),(2,4)和(5,2)。我需要一个算法,它可以给出每个x的值,从1到5落在插值弧上。

我确信这对你来说是一个简单的任务,但对我而言,这有点超出了我的数学薪酬水平。

提前致谢!

1 个答案:

答案 0 :(得分:2)

所以问题是如何计算由三个点C = (c1, c2)rP = (p1, p2) Q = (q1, q2)和半径S = (s1, s2).

这个想法非常简单。它包括意识到,根据定义,中心与所有三个点PQS.

具有相同的距离

enter image description here

现在,与PQ等距的所有点的集合是与中点PQ处发生的段(P+Q)/2的垂直线。同样地,与QS等距的所有点的集合是通过QS的{​​{1}}的垂线。因此,中心(Q+S)/2.必须是C的交点。这两行。

让我们计算这两条直线的参数方程。

为此,我们需要另外两个函数,我将调用dist(A,B)来计算点ABperp(A,B)之间的距离,以便对矢量{{1}进行规范化将它除以其长度(或范数)并回答该归一化向量的垂直向量(请记住,B-A的垂直是(a,b),因为它们的内积是(-b,a)

0

我们现在可以编写两行的参数表达式

dist((a1,a2),(b1,b2))
    Return sqrt(square(b1-a1) + square(b2-a2))

perp((a1,a2),(b1,b2))
    dist := dist((a1,a2),(b1,b2)).
    a := (b1-a1)/dist.
    b := (b2-a2)/dist.
    Return (-b,a).

请注意,两个参数都不同,因此引入了两个变量(P+Q)/2 + perp(P,Q)*t (Q+S)/2 + perp(Q,S)*u t

等同这些参数表达式:

u

由两个线性方程组成,每个坐标一个,两个未知数(P+Q)/2 + perp(P,Q)*t = (Q+S)/2 + perp(Q,S)*u t(见下文)。这个2x2系统的解决方案给出了注入参数表达式的参数ut的值给出了圆周的中心u

知道C后,半径C可以计算为r


线性方程式

r := dist(P,C).

第一个线性方程(坐标x)

(P+Q)/2 + perp(P,Q)*t = (Q+S)/2 + perp(Q,S)*u

第二个线性方程(坐标y)

(p1+q1)/2 + (p2-q2)/dist(P,Q)*t = (q1+s1)/2 + (q2-s2)/dist(Q,S)*u

线性系统(2x2)

(p2+q2)/2 + (q1-p1)/dist(P,Q)*t = (q2+s2)/2 + (s1-q1)/dist(Q,S)*u