![]() |
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] |
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:
(ungetestet)
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; |
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) |
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. |
Re: Begrenzung/Bereich einer Ellipse !!!
Oh; da hab' ich wohl gänzlich das falsche Forum erwischt; danke für den Hinweis !!!
:oops: |
Re: Begrenzung/Bereich einer Ellipse !!!
Bloß wo wird denn da jetzt angezeigt, ob der Klick sich nun auf oder neben der Ellipse befindet :?: :?: :?:
:roll: |
Re: Begrenzung/Bereich einer Ellipse !!!
Zitat:
(IMHO sollte es ausreichen die Methode zu beschreiben, anstatt das Programm für Dich zu schreiben) |
Re: Begrenzung/Bereich einer Ellipse !!!
Zitat:
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; |
Re: Begrenzung/Bereich einer Ellipse !!!
Vielen Dank; ich hoffe, es fu´nktioniert jetzt!!!
:-D |
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:
--> er zeigt an: Operator oder Simikolion fehlt
MausklickDrin(x,y)
was ist nun los? Naja.........außerdem möchte ich es gern so hinbekommen, dass er es am besten mit Hilfe von:
Delphi-Quellcode:
ausgibt; und das auch nur, wenn man raufgeklickt hat, dh nicht schon wenn man drüber fährt!!!
Canvas.TextOut(......................);
Na vielleicht kriegt es ja noch jemand hin - danke :thuimb: |
Re: Begrenzung/Bereich einer Ellipse !!!
zum 2.:
Delphi-Quellcode:
zum 1.: wo meckert der genau?
procedure TForm1.FormMouseDown;
begin if MausklickDrin(x,y) then {form1.}Canvas.TextOut(10, 20, 'Ist drin') {form1.}Canvas.TextOut(10, 20, 'Ist nicht drin.'; end; Ach ja, für das Funktionsergebnis macht sich auch Result ganz gut, das ist extra dafür erschaffen wurden
Delphi-Quellcode:
ist zwar das Selbe wie
function MausklickDrin(x,y:integer):boolean;
begin Result := irgendwas; end;
Delphi-Quellcode:
aber wenn man z.B. mal die Funktion umbenennt, so braucht man den Name innerhalb der Funktion nicht mehr zu ändern.
function MausklickDrin(x,y:integer):boolean;
begin MausklickDrin := irgendwas; end; |
Re: Begrenzung/Bereich einer Ellipse !!!
ich habe
Delphi-Quellcode:
zu
begin if MausklickDrin(x,y) then form1.caption:='Ist drin' else form1.caption:='Ist nicht drin.' end;
Delphi-Quellcode:
hinkopiert, wo nämlich auch schon andere Sachen stehen !!!
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Und da zeigt er mir den Fehler an: Operator oder Semikolion fehlt; und zwar genau zwischen
Delphi-Quellcode:
Naja; vielleicht fällt mir ja noch was ein !!!!!!!!!!!!!!
MausklickDrin(x und ,y)
|
Re: Begrenzung/Bereich einer Ellipse !!!
Das mit dem Semikolon ist nur ne Schreibfaulheit von mir. Ich laß das da, wo es erlaubt ist, einfach weg. Also am Zeilen(bzw. Befehls-)ende vor einem end, until, finally ect.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz