Radius Abfrage

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Radius Abfrage

BeitragMo, Feb 20, 2012 1:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hi erstmal^^

ich weiss nicht recht wie ich anfangen soll habe nun auch schon einiges einfach probiert, um irgendwie selbst auf eine lösung zu kommen, es war allerdings ' fail...

also wenn ich ein bereich prüfen will ob jemand irgendwo geklickt hat mach ich es so:
Code: [AUSKLAPPEN]

if mousedown(1) and mousex()> 50 and mousex()<150 and mousey()>60 and mousey()<80 then end


das beinhaltet ja das wenn man in diesem (4eck / Rechteck ) klickt das programm abgebrochen wird. aber wie mache ich es möglich einen radius abzufragen. also ein Kreis Z.b.

fazit wenn man in diesem kreis klickt beenden...

ich weis da derzeit kein rat daher verwirrung ^^

Midimaster

BeitragMo, Feb 20, 2012 1:40
Antworten mit Zitat
Benutzer-Profile anzeigen
nehmen wir an die RadiusMitte wäre bei X Y und der Radius wäre R:

BlitzMax: [AUSKLAPPEN]
If MouseDown(1) Then
If ( (MouseX()-X)^2 + (MouseY()-Y)^2 ) < R^2 Then
Print "Klick war innerhalb des Kreises"
EndIf
EndIf


es handelt sich um den alten Pythagoras a² + b² = c²
 

PhillipK

BeitragMo, Feb 20, 2012 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
wobei ich gelesen habe, das man kein ^2 etc schreiben sollte, da es langsamer sein soll.
Getestet habe ichs nicht, aber wenn man die rechnung ausschreibt (also statt x^2 lieber x*x!), ist man auf der sicheren seite Smile
Ansonsten: Jip, entweder so oder über einen Pythagoras (c² = a²+b²).
Eine solche funktion macht sich immer ganz gut, grade wenn man Spieleprogrammierung betreibt Smile Schussabfragen, Ki, etc. Lohnt also, sich sowas als funktion abzulegen.

BladeRunner

Moderator

BeitragMo, Feb 20, 2012 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann nicht sagen ob BMax ein ^2 automatisch zu x*x optimiert, das kann man ja aber selbst mal testen.
Ohne Optimierung wäre ein ^2 idR wirklich ein wenig langsamer. Der wesentliche Punkt ist es bei dem Vergleich keine Wurzel zu ziehen (was hier ja auch noch keiner vorgeschlagen hat), da diese Operation wirklich sehr teuer ist, und es ja genauso effizient ist die Quadrate miteinander zu vergleichen.
Zudem: Diese Optimierungen sind nur interessant wenn sehr viele Radien verglichen werden sollen. Bei ein paar hundert Stück sollte das keinen halbwegs modernen Rechner beeinträchtigen.

EDIT:
Zitat:
Ansonsten: Jip, entweder so oder über einen Pythagoras (c² = a²+b²)

*Hust* Das IST der Pythagoras, wie es Midimaster beschreibt Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ozzi789

BeitragMo, Feb 20, 2012 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Da dies wahrscheinlich nicht die einzige Mausabfrage sein wird, würde ich dir anraten MouseX() und MouseY() in einer globalen Variable zu speichern Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

DAK

BeitragMo, Feb 20, 2012 13:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und das Gleiche mit dem MouseDown, vorallem wenns ein MouseHit ist, der ja nach der ersten Abfrage sofort auf 0 gesetzt wird.
Gewinner der 6. und der 68. BlitzCodeCompo

Nicdel

BeitragMo, Feb 20, 2012 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Macht in der Tat einen großen Unterschied ob man x*x oder x^2 schreibt:

Zitat:
x*x: 9
x^2: 1331


BlitzMax: [AUSKLAPPEN]
Local x:Int = 1337

time = MilliSecs()

For i = 0 Until 10000000

y = x*x

Next

Print "x*x: "+(MilliSecs()-time)

time = MilliSecs()

For i = 0 Until 10000000

y = x^2

Next

Print "x^2: "+(MilliSecs()-time)
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Midimaster

BeitragMo, Feb 20, 2012 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun beruhigt euch mal wieder!

Es dürfte dem Anfragenden ziemlich egal sein, ob seine gesuchte Funktion...

0,00001234 sec

oder...

0,00000009 sec

...dauert! Er soll das Prinzip verstehen. Warum schreibt Ihr darüber nix. Ich habe ihm nur einen Algo hingeknallt. Wenn Ihr schon weiter ausholen wollt, dann doch in Richtung Thema!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Mathias-Kwiatkowski

BeitragMo, Feb 20, 2012 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ich danke dir,
und ja es is mir in dem fall auch egal wiviel mikrosekunden es dauert ^^
aber interessant zu wissen das es da ein unterschied gibt. von daher danke an allen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group