Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kreis Winkelberechnung (https://www.delphipraxis.net/127938-kreis-winkelberechnung.html)

Poring 21. Jan 2009 15:56


Kreis Winkelberechnung
 
Guten Abend zusammen.

Ich möchte gerne folgendes machen:
Man soll an einem Kreis eine beliebe Stelle anklicken können und bekommt dann den jeweiligen Winkel angezeigt (0° ist dann der oberste Punkt des Kreises).

Ich habe leider nach einer etwas kleineren Pause keine eine tolle Idee, wie man dies realisieren könnte.

Wäre über jede Hilfe dankbar :)

Liebe Grüße,
Poring

mr_emre_d 21. Jan 2009 16:03

Re: Kreis Winkelberechnung
 
sinus : gegenkathete / hypothenuse
cosinus: ankathete / hypothenuse

sinus(winkel) = y / radius
cosinus(winkel) = x / radius

Einfach umformen ... :P

Poring 21. Jan 2009 16:06

Re: Kreis Winkelberechnung
 
Danke schonmal :)
Sowas ähnliches hatte ich zum sinus auch noch in Erinnerung :)

Allerdings habe ich eher das Problem:
Wie mache ich ein Kreis, an dem man nur die Stellen anklicken kann wo der Kreis gezeichnet ist, und er dann den Winkel bestimmt

mr_emre_d 21. Jan 2009 16:10

Re: Kreis Winkelberechnung
 
entweder du zeichnest sie per hand
indem du folgende gleichung verwendest:
k: (x-mx)²+(y-my)²=r²

oder du machst es mit der Canvas funktion
Ellipse !

Anschließend ermittelst du nach einem klick
P(x,y) den P' auf dem Kreis !

wenn du das hast musst du nur noch mehr den
Winkel ausrechnen :P

Poring 21. Jan 2009 16:27

Re: Kreis Winkelberechnung
 
Nur wie ermittel ich bei dem Image Canvas den klick Punkt?
Der kann ja auch außerhalb des Kreises liegen.

mr_emre_d 21. Jan 2009 16:46

Re: Kreis Winkelberechnung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier, da mir fad war und ich nichts besseres zu tun hatte :P

MfG

DeddyH 21. Jan 2009 16:47

Re: Kreis Winkelberechnung
 
Das macht doch nichts, ob der Punkt innerhalb oder außerhalb des Kreises liegt.

Poring 21. Jan 2009 17:31

Re: Kreis Winkelberechnung
 
Das ist ja genau das, was ich mir vorgestellt hatte :thumb:
Du hast die Funktion ja ins FormMouseover und ins Form zeichnen lassen.
Worein kann ich des in einen bestimmen Bereich zeichnen lassen? Zb in ein 4Eck mit Radius+1 Länger zb?
Weil will ja in der Form noch was andres reinpacken :)

shmia 21. Jan 2009 17:34

Re: Kreis Winkelberechnung
 
Ja, der Radius ist völlig egal.
Es gibt einen Mittelpunkt M und den angeklickten Punkt P.
Jetzt berechnet man einen Vektor von M bis zu P.

Dann muss man diesen Richtungsvektor in Polarkoordinaten umrechnen.
Mit der angesprochenen Funktion ArcTan2() wird das Berechnen des Winkels zum Kinderspiel.

Poring 21. Jan 2009 17:37

Re: Kreis Winkelberechnung
 
Das hat er ja netterweise schon mal alles vorgeschrieben.
Nur kann ich auch auf der Form 500px weiter rechts klicken und der Winkel wird berechnet zum Kreis. Möchte den Wirkungsbereich ja nur möglichst am Kreis haben.

Nur wenn mans ins Image schreibt, hat man gleich nen weißen HG mit dabei.

mr_emre_d 21. Jan 2009 17:45

Re: Kreis Winkelberechnung
 
Möchte den Wirkungsbereich ja nur möglichst am Kreis haben.
- Es ist eh am Kreis:

Spiel mal ein wenig mit dem M-Vektor !
Setz auf M = Point( 500, 50 )
und umschreibe die Ellipse zu Rectangle !

Ansonsten versteh ich ned ganz dein Problem ... :S

MfG

Poring 21. Jan 2009 17:53

Re: Kreis Winkelberechnung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da es im
Delphi-Quellcode:
TForm1.FormPaint
steht, kann ich überall auf der Form hinklicken und es wird berechnet. Allerdings sollen dort ja noch andere Dinge hin, deswegen möchte ich das nur der Winkel berechnet wird wenn man auch etwa in kurzer Entfernung zum Kreis irgendwo hinklickt.
Besser verständlich?

Siehe Bild: Nur im roten Bereich soll gerechnet werden

Fussball-Robby 21. Jan 2009 18:01

Re: Kreis Winkelberechnung
 
Berechne im OnMouseDown (ich schätze mal da wird gerechnet) mittels dem Satz des Pythagoras den Abstand vom angeklickten Punkt zum Mittelpunkt: Distanz = Wurzel((xMitte - X)² + (yMitte - Y)²) und rechne nur wenn die Distanz für dich klein genug ist,. Oder, wenn du es in einem Rechteck haben willst, hilft dir die Funktion Delphi-Referenz durchsuchenPtInRect() weiter.

mr_emre_d 21. Jan 2009 18:03

Re: Kreis Winkelberechnung
 
Nein nein Robby.. Geht viel einfacher: ;)
Nimm einfach den Betrag von MP ( MP = Mittelpunk des Kreises bis Punkt )

MP := P - M
Länge MP = SQRT(MP.X*MP.X + MP.Y*MP.Y)
wenn Länge <= Radius dann im Kreis !!

MfG

Poring 21. Jan 2009 18:06

Re: Kreis Winkelberechnung
 
Er berechnet so oder so immer nur vom MP bis zum Kreis.
Ich will nur, das ich auserhalb des roten Kästchen klicken kann, ohne das er irgendwas berechnet, zeichnet, oder ähnliches. Sondern das alles nur macht wenn man innerhalb des roten Kästchen drückt?

Fussball-Robby 21. Jan 2009 18:10

Re: Kreis Winkelberechnung
 
Zitat:

Zitat von Poring
Er berechnet so oder so immer nur vom MP bis zum Kreis.
Ich will nur, das ich auserhalb des roten Kästchen klicken kann, ohne das er irgendwas berechnet, zeichnet, oder ähnliches. Sondern das alles nur macht wenn man innerhalb des roten Kästchen drückt?

Ich habe dir doch die Funktion bereits genannt: PtInRect. Beispiel: (schnell hingetippt)
Delphi-Quellcode:
var
  Rec: TRect;
  RecWidth, RecHeight: Integer;
begin
  RecWidth := Radius + 10;
  RecHeight := Radius + 10;

  Rec.Left := Mitte.X - RecWidth;
  Rec.Right := Mitte.X + RecWidth;

  Rec.Top := Mitte.Y - RecHeight;
  Rec.Bottom := Mitte.Y + RecHeight;

  if PtInRect(Rec, Point(X, Y)) then
    Rechnen();
end;
Musst du natürlich auf dein Programm zuschneiden.


Zitat:

Zitat von mr_emre_d
Nein nein Robby.. Geht viel einfacher: ;)

Deins ist im Wesentlichen das gleiche wie meins, ich habe nur den Zwischenschritt mit dem Betrag weggelassen :wink:

Poring 21. Jan 2009 18:22

Re: Kreis Winkelberechnung
 
Geht! :)

Vielen lieben Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz