Mouseover-Abfrage für n-Ecke

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

CodeMaster

Betreff: Mouseover-Abfrage für n-Ecke

BeitragDo, Mai 26, 2005 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Für meine Informatik-Facharbeit habe ich einen Algorithmus gebraucht,
welcher herausfindet, ob ein beliebiges n-Eck angeklickt wurde. Da mir
kein Algorithmus bekannt war, hab ich mir selbst einen ausgedacht, welcher
einwandfrei funktioniert:BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Const Points = 6

Dim Point#(Points,2)
RandomizeFigure()

While Not KeyDown(1)
Cls
If KeyHit(57) Then RandomizeFigure()
ShowFigure()
Text 1,1,\"MOUSEOVER: \" + MouseOver(MouseX(),MouseY())
Flip
Wend
End

Function RandomizeFigure()
For i = 0 To Points-1
Point(i,1) = Rand(GraphicsWidth())
Point(i,2) = Rand(GraphicsHeight())
Next
End Function

Function ShowFigure()
Color 255,255,255
For i = 0 To Points-1
Line Point(i,1), Point(i,2), Point((i+1) Mod Points,1), Point((i+1) Mod Points,2)
Next
End Function

Function MouseOver(x#,y#)
Color 100,100,100
Line x,0,x,600
For i = 0 To Points-1
x1# = Point(i,1)
x2# = Point((i+1) Mod Points, 1)
y1# = Point(i,2)
y2# = Point((i+1) Mod Points, 2)
If x2 < x1 Then x3 = x2 x2 = x1 x1 = x3 y3 = y2 y2 = y1 y1 = y3
If (x >= x1) And (x <= x2) Then
yp# = y1 + (x - x1) * (y2 - y1) / (x2 - x1)
If yp <= y Then s = s + 1
Color 255,0,0
Oval x-3,yp-3,6,6,1
EndIf
Next
Color 255,255,255
Return s Mod 2
End Function
Vielleicht kann's ja jemand von euch brauchen. Wenn es jemanden
interessiert, erkläre ich das Prinzip gerne.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
 

DarkMike

Betreff: Re: Mouseover-Abfrage für nEcks

BeitragDo, Mai 26, 2005 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
CodeMaster hat Folgendes geschrieben:
Wenn es jemanden
interessiert, erkläre ich das Prinzip gerne.


Ja bitte!
2 dinge sind unendlich die menschliche Dummheit und das Universum obwohl beim Universum bin ich mir nicht ganz sicher. (Albert Einstein)
 

CodeMaster

BeitragDo, Mai 26, 2005 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Also es ist wirklich total einfach! Mein Code ist nicht zur Implementierung
gedacht sondern eher zur Veranschaulichung des Prinzipes, welches ich
mir da ausgedacht habe: Wenn du die Maus bewegst, siehst du eine
graue Linie, welche die X-Achse der Mausposition darstellt. Desweiteren
siehst du rote Punkte, das sind die Schnittpunkte der Mausachse mit den
Kanten des n-Ecks.

Zuerst wird also für jede Kante des Objektes geprüft, ob die Maus sich
zwischen den beiden horizontalen Begrenzungen der Linie befindet
(die Maus muss also "rechtser" als der linke Punkt und "linkser" als der
rechte Punkt der Linie sein). Ist das der Fall, kann man einen Schnittpunkt
mit der ersten Achse der Maus berechnen - die roten Punkte.

Anschließend zähle ich die Schnittpunkte, die sich oberhalb der Mausposition
befinden. Nun ist es so, dass wenn diese Anzahl gerade ist, sich aus Gründen
der Logik die Maus nicht innerhalb der Figur befinden kann. Sollte die
Anzahl ungerade sein, ist die Position innerhalb der Figur.

So einfach.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Mattis_the_brain

BeitragMo, Mai 30, 2005 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach aber genial... hab schon lange über dem Problem gegrübelt und nach einem Ansatz gesucht und siehe an so einfach geht das.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group