有两条曲线如下:
g: x² + 3y² - 2 = 0
f: x² - 3x + 3 - y = 0
求两曲线上最近两点或者两曲线最小距离。
不要脸之一——暴力列表法:
先在抛物线上取一段离椭圆较近的曲线段,然后在曲线段上描1000个,分别计算与椭圆最近距离,然后找出最小值对应的点:
A = 描点(f)
C = 描点(f)
a = 曲线(t, f(t), t, x(A), x(C))
l1 = 序列(描点(a, i), i, 0, 1, 1 / 1000)
l2 = 映射(距离(m, 最近点(g, m)), m, l1)
b = 最小值(l2)
c = 索引(b, l2)
B = l1(c)
D = 最近点(g, B)
如何觉得这方法不够准确,我们还可以不要脸地来一次修正,把找到的两点相互再取最近点,然后取中间值:
D = 最近点(g, B)
E = 最近点(f, D)
F = (B + E) / 2
G = 最近点(g, F)
不要脸之二——赖皮迭代法:
k = 25
H = 描点(a)
I = 迭代(最近点(f, 最近点(g, m)), m, {H}, k)
J = 最近点(g, I)
k为整数滑动条,拖动它,迭代出来的点I不动了,那就是答案了,在25左右就行了,原理是如上边修改时的做法,反复对两个点互相找最近点,最后怎么找结果都不变了,那答案就出来了。
g: x² + 3y² - 2 = 0
f: x² - 3x + 3 - y = 0
求两曲线上最近两点或者两曲线最小距离。
不要脸之一——暴力列表法:
先在抛物线上取一段离椭圆较近的曲线段,然后在曲线段上描1000个,分别计算与椭圆最近距离,然后找出最小值对应的点:
A = 描点(f)
C = 描点(f)
a = 曲线(t, f(t), t, x(A), x(C))
l1 = 序列(描点(a, i), i, 0, 1, 1 / 1000)
l2 = 映射(距离(m, 最近点(g, m)), m, l1)
b = 最小值(l2)
c = 索引(b, l2)
B = l1(c)
D = 最近点(g, B)
如何觉得这方法不够准确,我们还可以不要脸地来一次修正,把找到的两点相互再取最近点,然后取中间值:
D = 最近点(g, B)
E = 最近点(f, D)
F = (B + E) / 2
G = 最近点(g, F)
不要脸之二——赖皮迭代法:
k = 25
H = 描点(a)
I = 迭代(最近点(f, 最近点(g, m)), m, {H}, k)
J = 最近点(g, I)
k为整数滑动条,拖动它,迭代出来的点I不动了,那就是答案了,在25左右就行了,原理是如上边修改时的做法,反复对两个点互相找最近点,最后怎么找结果都不变了,那答案就出来了。