Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Begrenzung/Bereich einer Ellipse !!! (https://www.delphipraxis.net/18253-begrenzung-bereich-einer-ellipse.html)

taza 16. Mär 2004 15:52


Begrenzung/Bereich einer Ellipse !!!
 
Ist es möglich den Bereich einer Ellipse zu definieren, um sagen zu können, ob sich ein Punkt auf oder neben dieser befindet ??? Ich will auf eine Stelle in meinem Programm klicken und dann angezeigt bekommen, ob der Klick "getroffen" hat (also auf der Ellipse liegt) oder er "daneben gegangen" ist (also neben die Ellipse liegt) :!: :!: :!:

Bitte um schnelle Antwort

;-)

[edit=r_kerber]Habe ich gestern abend ganz vergessen zu sagen: Die anderen Dreifach-Posts gelöscht! Mfg, r_kerber[/edit]

Thunderchild 16. Mär 2004 16:34

Re: Begrenzung/Bereich einer Ellipse !!!
 
Man könnte sich das ja leicht ausrechnen.
Ellipsengleichung: x²/a²+y²/b²=1 (gibt Ellipse um Nullpunkt mit a=Radius entlang x, b=Radius entlang y)

Diese Gleichung zum Beispiel nach y umstellen.

Aus dem Mausklick das x nehmen und in diese Gleichung für y einsetzen.
Das errechnete y mit dem y des Mausklicks vergleichen.

Beispiel:
Ellipse um den Punkt (100,100) mit Radius 50 entlang x und Radius 30 entlang y.

Delphi-Quellcode:
function MausklickDrin(x,y:integer):boolean; // x,y=Mauskoordinaten
var yEllipse:integer; // Mauskoordinaten
const Mitte_x=100; Mitte_y=100; a=50; b=30;
begin
  // 1. Mausklick in Relation zum Ellipsenmittelpunkt setzen:
  x:=x-Mitte_x; y:=y-Mitte_y;
  // 2. Abstand der Ellipse zur x_achse bei x ermitteln
  yEllipse:=sqrt((1-x*x/a/a)*b*b);
  // 3. Prüfen, ob y innerhalb von ±yEllipse liegt
  MausklickDrin:=(y>=-abs(yEllipse)) and (y<=abs(yEllipse))
end;
(ungetestet)

taza 16. Mär 2004 18:01

Re: Begrenzung/Bereich einer Ellipse !!!
 
Also wir es hier beschrieben wurde, klappt es leider nicht........schade eigentlich; na vielleicht gibt es ja noch weitere Varianten ;-)

Danke aber trotzdem schonmal.................... 8)

czapie 16. Mär 2004 18:10

Re: Begrenzung/Bereich einer Ellipse !!!
 
Das ist aber glaub ich der richtige Weg!
Guck es dir mal genauer an, alles andere wird nur schwieriger, aber warum bei "Windows API" ?

Czapie.

taza 16. Mär 2004 18:14

Re: Begrenzung/Bereich einer Ellipse !!!
 
Oh; da hab' ich wohl gänzlich das falsche Forum erwischt; danke für den Hinweis !!!

:oops:

taza 16. Mär 2004 18:16

Re: Begrenzung/Bereich einer Ellipse !!!
 
Bloß wo wird denn da jetzt angezeigt, ob der Klick sich nun auf oder neben der Ellipse befindet :?: :?: :?:

:roll:

NicoDE 16. Mär 2004 18:27

Re: Begrenzung/Bereich einer Ellipse !!!
 
Zitat:

Zitat von taza
wo wird denn da jetzt angezeigt, ob der Klick sich nun auf oder neben der Ellipse befindet?

Nirgendwo.
(IMHO sollte es ausreichen die Methode zu beschreiben, anstatt das Programm für Dich zu schreiben)

Thunderchild 16. Mär 2004 22:09

Re: Begrenzung/Bereich einer Ellipse !!!
 
Zitat:

Zitat von taza
Bloß wo wird denn da jetzt angezeigt, ob der Klick sich nun auf oder neben der Ellipse befindet :?: :?: :?:

:roll:

Das macht der Rückgabewert der Funktion; er ist true, wenn der Klick innerhalb der Ellipse ist.

Ich habe das ganze mal getestet und dadurch überarbeitet. Ein Fehler war die Wurzel. Da kam noch n abs() rein und ein round() drum rum. Außerdem hab ich die Endbedingung erweitert.

Beginne eine neue Anwendung, erzeuge einen Eventhandler für Form1.Create und Form1.OnPaint. Ersetze dann den ganzen Implementation-Code durch den folgenden:

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin canvas.Ellipse(20,20,120,80) end;

function MausklickDrin(x,y:integer):boolean; // x,y=Mauskoordinaten
var yEllipse:integer; // Mauskoordinaten
const Mitte_x=70; Mitte_y=50; a=50; b=30;
begin
  x:=x-Mitte_x; y:=y-Mitte_y;
  yEllipse:=round(sqrt(abs((1-x*x/a/a)*b*b)));
  MausklickDrin:=(y>=-abs(yEllipse)) and (y<=abs(yEllipse)) and (x>=-a) and (x<=a)
end;

procedure TForm1.FormMouseDown;
begin if MausklickDrin(x,y) then form1.caption:='Ist drin' else form1.caption:='Ist nicht drin.' end;

taza 17. Mär 2004 19:47

Re: Begrenzung/Bereich einer Ellipse !!!
 
Vielen Dank; ich hoffe, es fu´nktioniert jetzt!!!

:-D

taza 18. Mär 2004 15:33

Re: Begrenzung/Bereich einer Ellipse !!!
 
[/delphi]ich habe jetzt ein kleines Problem: der Source-Code funktioniert ja, aber ich will ihn in mein schon vorhandenes Programm intigrieren; und da zeigt er den Fehler an:

Delphi-Quellcode:
 MausklickDrin(x,y)
--> er zeigt an: Operator oder Simikolion fehlt

was ist nun los?

Naja.........außerdem möchte ich es gern so hinbekommen, dass er es am besten mit Hilfe von:

Delphi-Quellcode:
 Canvas.TextOut(......................);
ausgibt; und das auch nur, wenn man raufgeklickt hat, dh nicht schon wenn man drüber fährt!!!


Na vielleicht kriegt es ja noch jemand hin - danke :thuimb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 1 von 2  1 2      

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