uj5u.com熱心網友回復:
uses System.Types;
function PtInCircle(const P, CP: TPoint; const R: cardinal): integer;
var
D: cardinal;
begin
if P.X = CP.X then D := abs(CP.Y - P.Y) else
if P.Y = CP.Y then D := abs(CP.X - P.X) else
D := round(sqrt(abs((CP.X - P.X) * (CP.X - P.X)) +
abs((CP.Y - P.Y) * (CP.Y - P.Y))));
if D < R then Result := 1 else
if D = R then Result := 0 else
Result := -1;
end;
P是點坐標,CP是圓心坐標,R是園半徑,回傳值1: 點在圓內,0: 點在圓上,-1: 點在圓外
使用:writeln(PtInCircle(Point(9, 9), Point(1, 2), 5));
uj5u.com熱心網友回復:
給LZ一個建議,直接比較R*R和D*D,避免SQRT可以加快速度 。uj5u.com熱心網友回復:
計算兩點距離 大于 半徑、等于半徑、小于半徑。uj5u.com熱心網友回復:
正道!做乘法是很快的,現在的CPU都有硬體乘法器,但開平方就一定要呼叫浮點運算的
function PtInCircle(const P, CP: TPoint; const R: cardinal): integer;
var
D2, R2, dX, dY: Integer;
begin
R2:= R * R;
dX:= P.X - CP.X;
dY:= P.Y - CP.Y;
D2:= dX * dX + dY * dY;
Result:= R2 - D2;
end;
uj5u.com熱心網友回復:
點到圓心的距離來判斷,不要進行開方運算,直接比較平方,會快點。uj5u.com熱心網友回復:
Study it !
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41272.html
標籤:語言基礎/算法/系統設計
