所以我有一個被描述為起點、終點和它的中心點的弧。所以我可以很容易地確定角度、放射線、中點。
我已經使用了這個問題中的公式

uj5u.com熱心網友回復:
我看到您有 Delphi 問題,因此您也許可以重現該手動測驗。滑鼠左鍵單擊圓弧起點(紅色),中鍵單擊中間(綠色),右鍵單擊圓弧終點(藍色)。
IsCW 適用于左手坐標系,右手一變比較 >
uses... Math;
var
Form1: TForm1;
R: Integer = 200;
cx: Integer = 300;
cy: Integer = 300;
sx, sy, mx, my, ex, ey: Integer;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
l: Double;
begin
l := Hypot(x - cx, y - cy) 0.1;
case Button of
mbLeft: begin
sx := cx Round((x-cx)*R / l);
sy := cy Round((y-cy)*R / l);
end;
mbMiddle: begin
mx := cx Round((x-cx)*R / l);
my := cy Round((y-cy)*R / l);
end;
mbRight:
begin
ex := cx Round((x-cx)*R / l);
ey := cy Round((y-cy)*R / l);
end;
end;
Refresh;
end;
procedure TForm1.FormPaint(Sender: TObject);
function IsCW(sx, sy, mx, my, ex, ey: Integer): Boolean;
begin
Result := (ex-sx) * (my-sy) - (ey-sy) * (mx-sx) < 0;
end;
var
a, bx, by, c: Double;
s:string;
begin
Canvas.FillRect(ClientRect);
Canvas.Pen.Width := 3;
Canvas.Pen.Color := clBlack;
Canvas.Ellipse(cx - r, cy - r, cx r 1, cy r 1);
Canvas.Pen.Color := clRed;
Canvas.Ellipse(sx - 3, sy - 3, sx 4, sy 4);
Canvas.Pen.Color := clLime;
Canvas.Ellipse(mx - 3, my - 3, mx 4, my 4);
Canvas.Pen.Color := clBlue;
Canvas.Ellipse(ex - 3, ey - 3, ex 4, ey 4);
if IsCW(sx, sy, mx, my, ex, ey) then
s := 'CW'
else
s := 'CCW';
Canvas.TextOut(cx - 20, cy - 20, s);
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396993.html
