我需要找到一个盒子和一个圆圈之间的最近距离,但是,我意识到这可以分解成一个线段和一个圆圈之间的最近距离。
point1_x
,point1_y
和point2_x
,point2_y
circle_x
,circle_y
和半径 radius
是否有一个支持这种开箱即用的python库,如果没有,有人可以提供这样的功能吗?
(我相信我必须在圆上找到与线相同斜率的切点?)
答案 0 :(得分:2)
有一种方法可以找到从圆到矩的最近距离(这里是以轴为中心) 矩形边将平面分成9块。我们可以找到哪个部分(中央,左上,左等)包含圆心,并计算所需的距离。矩形ABCD和圆心E:
德尔福代码:
//returns closest distance from circle to rectangle
//0 if intersection or inclusion occurs
function CircleRectDistance(CX, CY, CR: Integer; RR: TRect): Double;
var
wh, hh, dx, dy, t, SquaredDist: Double;
begin
SquaredDist := 0;
//halfwidth and halfheight
wh := 0.5 * (RR.Right - RR.Left);
hh := 0.5 * (RR.Bottom - RR.Top);
//distances to rectangle center
dx := CX - 0.5 * (RR.Left + RR.Right);
dy := CY - 0.5 * (RR.Top + RR.Bottom);
//rectangle sides divide plane to 9 parts,
t := dx + wh;
if t < 0 then
SquaredDist := t * t
else begin
t := dx - wh;
if t > 0 then
SquaredDist := t * t
end;
t := dy + hh;
if t < 0 then
SquaredDist := SquaredDist + t * t
else begin
t := dy - hh;
if t > 0 then
SquaredDist := SquaredDist + t * t
end;
if SquaredDist < CR * CR then
Result := 0
else
Result := Sqrt(SquaredDist)- CR;
end;
答案 1 :(得分:1)
euclid模块。安装时:
pip install euclid
然后像这样使用它:
>>> from euclid import *
>>> circ = Circle(Point2(3., 2.), 2.)
>>> line = Line2(Point2(0., 0.), Point2(-1., 1.))
>>> line.distance(circ)
1.5355339059327378