我正在编写一个图形应用程序,需要计算并显示沿曲线弧的点列表,该点由三点描述。
让我们说我们有分(1,1),(2,4)和(5,2)。我需要一个算法,它可以给出每个x的值,从1到5落在插值弧上。
我确信这对你来说是一个简单的任务,但对我而言,这有点超出了我的数学薪酬水平。
提前致谢!
答案 0 :(得分:2)
所以问题是如何计算由三个点C = (c1, c2)
,r
和P = (p1, p2)
给出的圆周的中心Q = (q1, q2)
和半径S = (s1, s2).
这个想法非常简单。它包括意识到,根据定义,中心与所有三个点P
,Q
和S.
现在,与P
和Q
等距的所有点的集合是与中点PQ
处发生的段(P+Q)/2
的垂直线。同样地,与Q
和S
等距的所有点的集合是通过QS
的{{1}}的垂线。因此,中心(Q+S)/2.
必须是C
的交点。这两行。
让我们计算这两条直线的参数方程。
为此,我们需要另外两个函数,我将调用dist(A,B)
来计算点A
与B
和perp(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系统的解决方案给出了注入参数表达式的参数u
和t
的值给出了圆周的中心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