在最接近给定点的圆上找到点的最佳方法

Mat*_*ell 35 language-agnostic algorithm geometry

给定一个点(pX,pY)和一个具有已知中心(cX,cY)和半径(r)的圆,你可以找到最短的代码量来找到最接近(pX的圆上的点) pY)?

我有一些代码工作,但它涉及将圆转换为形式的方程(x - cX)^ 2 +(y - cY)^ 2 = r ^ 2(其中r是半径)并使用方程从点(pX,pY)到(cX,cY)的线,以创建要求解的二次方程.

一旦我解决了它会做的错误,但它似乎是一个不优雅的解决方案.

Mik*_*vey 62

其中P是点,C是中心,R是半径,用合适的"mathy"语言:

V = (P - C); Answer = C + V / |V| * R;
Run Code Online (Sandbox Code Playgroud)

其中| V | 是长度V.

好的好的

double vX = pX - cX;
double vY = pY - cY;
double magV = sqrt(vX*vX + vY*vY);
double aX = cX + vX / magV * R;
double aY = cY + vY / magV * R;
Run Code Online (Sandbox Code Playgroud)

易于扩展到> 2维.


Joh*_*itb 8

我会从中心到点做一条线,并且在那个图形穿过圆圈的地方进行计算oO我觉得不那么困难