Hi
Um einen Winkel angeben zu können, benötigt man drei Punkte. Wenn ich dich richtig verstanden habe(schwerlich, du drückst dich nicht sehr ausführlich aus), ist der erste Punkt wohl in Bezug auf den
Einheitskreis der Punkt (1/0), bzw. auf den allgemeinen Kreis dann (Xm+r/Ym). Der zweite Punkt wäre der Mittelpunkt (Xm/Ym). Und als dritten Punkt dann einfach die Koordinaten des Mausklicks nehmen.
Haben wir also unsere drei Punkte, so können wir eine Steigung berechnen. Diese Wandeln wir dann mit dem Arcustangens in einen Winkel um.
Im beschriebenen Fall ist die Steigung des Winkelschenkels P1-P2 wohl null, daher berechnen wir einfach die Steigung der Strecke Mittelpunkt - Mausklick.
Die Steigung berechnet sich als
Quelltext
1:
| m := dy/dx = (Maus.Y - Ym) / (Maus.X - Xm) |
Da du den Kreis "ganz normal" gezeichnet hast, gehe ich mal davon aus, dass du wie es sich gehört eine Paintbox verwendest - und kein Image oder gar das Canvas des Formulars
Dann nimmst du dir beispielsweise die Methode
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin
end; |
und hast mit den Parametern X, Y die Koordinaten der Maus. Mit ArcTan(m) = w erhältst du aus den Koordinaten wie oben beschrieben den Winkel. Jetzt musst du aber noch einige Sonderfälle beachten, das überlasse ich mal dir. So musst du dir noch überlegen was du machst, wenn die Steigung entweder Unendlich oder negatives Unendlich ist(Xm = Maus.X). Außerdem lässt sich von der Steigung nicht eindeutig auf den Winkel schließen, da um 180° vergrößerte Winkel wieder der selben Steigung entsprechen. Da negatives dY und negatives dX die selbe Steigung geben wie die positiven Werte, kannst du so nur den Bereich von -90° bis +90° erfassen. Du kannst allerdings vorher prüfen, ob einer der Werte negativ ist und entsprechend 180° dazuaddieren, damit hast du dann alle Winkel.
Insgesamt entspricht das dann der Funktion ArcTan2 - für die Eingeweihten. Für den Anfang solltest du es aber erst einmal selbst umsetzen, da du es dann besser verstehst.
mfG,