Kollision mit Line (Linien) !

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Tom

Betreff: Kollision mit Line (Linien) !

BeitragSa, Mai 22, 2004 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich die Kollision mit Line überprüfen?
Wenn ich z.B. will,dass eine mit Line gemachte Linie ein bitmap auf kollision überprüfen soll.
Wie kann ich das machen?

Bitte Helfen!
AthlonXP 2800+ ~ 2.0Ghz ; Radeon9800pro ATLANTIS (Sapphire) ; 512mb DDR RAM (333mhz) ; Creative Soundblaster Audigy2 ZS ;
BlitzPlus (B+)

Mein Allgemein-FORUM : http://www.tom-forum.de.tc

Meine Mini-Page : www.tom.kohop.de

Gossi

BeitragSa, Mai 22, 2004 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Dazu nimmst du dir die Koordinaten des Start- und End-Punktes. Dann schlägst du dein Tafelwerk auf und suchst nach der Punkt-Richtungs-Gleichung. Setze die koordinaten dort ein und du hast die Funktion f(x)=y=mx+n. Nun gehst du die Linie entweder Punkt für Punkt durch, und Prüfst ob Y im Rechteck liegt ODER du überlegst dir, wie du die Schnittstelle zwischen Funktion und Rechteck ermittelst. Im Tafelwerk sollte genug Zeug dafür drin stehn.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.
 

HOT-BIT

Gast

BeitragSa, Mai 22, 2004 11:38
Antworten mit Zitat
Hoi !

Tafelwerk ist Teufelswerk Wink

Wer kennt sich denn da aus ?

Ist doch besser, man fragt hier, baut die geposteten Codes in sein Programm ein, und kann sich dann sicher sein, daß, wenn einmal was geändert werden muß, man noch immer keinen Plan hat, um was es überhaupt geht ! Smile

>War informativ und nett gemeint<

Toni

Hubsi

BeitragSa, Mai 22, 2004 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Schnell und einfach: ImageRectCollide
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

TheShadow

Moderator

BeitragSa, Mai 22, 2004 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
blitzbase -> code ->"linienkollision"
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Master King of

BeitragSa, Mai 22, 2004 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hubsi
Mit ImageRectCollide funktioniert das aber nur wenn die Linie nicht schräg ist!!!

Hubsi

BeitragSa, Mai 22, 2004 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed Stimmt. Daran hab ich jetzt gar nicht gedacht Embarassed
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Mattis_the_brain

BeitragSo, Mai 23, 2004 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Was laaabert ihr?^^ Erstens Tafelwerk is schon ein geiles Buch. Zweitens wenn man eine schräge linie hat könnte man höchstens den Befehl ImagesCollide nehmen was in meinen Augen aber Schwachsinn wäre da es erstens zu langsam ist und zweitens geht es auch besser nämlich mit der Vektorrechnung. Wenn ich mich nicht irre, hatte das nämlich noch nicht in der Schule, müsste das mit dem Vektorprodukt gehen müsste mich da aber auch erst belesen. Und wie gesagt auf BlitzBase steht ja wies geht^^

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 23, 2004 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Code-Archiv findest du Eine Function von mir, mit der man Bilder verschieben kann ("Move"), dazu wir einfach der Zwischenraum zwischen zwei Punkten im mehrere kleinere Teil aufgeteilt. Um eine Kollision mit dieser Linie festzustellen, kann man diese Funktion einfach umändern, etwa so:

Code: [AUSKLAPPEN]

move(startx,starty,zielx,ziely)
xpos = startx
ypos = starty
eckx = startx
ecky = ziely
schritt = Sqr((ecky - starty)^2+(eckx - zielx)^2)/5
schiebx = (eckx - zielx)/ schritt
schieby = (ecky - starty)/ schritt

For i = 1 to schritt
xpos = xpos - schiebx
ypos = ypos + schieby
[ ... ]
Next

End Function


Im den [ ... ] muss nun die Collisionsabfrage stattfinden:
z.B.
Code: [AUSKLAPPEN]
ImageRectCollide(bild,x,y,frame,xpos,ypos,1,1) Then stoss = 1


Tja, so geht das, sehr umständlich, aber effektiv Very Happy
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Gossi

BeitragSo, Mai 23, 2004 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Mattis_the_brain hat Folgendes geschrieben:
Was laaabert ihr?^^ Erstens Tafelwerk is schon ein geiles Buch.


Da stimme ich dir voll und ganz zu. Aber ich gehe mal davon aus, dass Hot-Bit das ironisch gemeint hat.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Mattis_the_brain

BeitragSo, Mai 23, 2004 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier hab ich auf blitzbase gefunden und noch ein wenig vereinfacht jetzt gibt die function entweder true für kollision und false für nicht kollision aus.

Code: [AUSKLAPPEN]

Global intersection_x#
Global intersection_y#
Global intersection_ab#
Global intersection_cd#

Function Lines_Collision(ax#, ay#, bx#, by#, cx#, cy#, dx#, dy#)
   rn# = (ay#-cy#)*(dx#-cx#) - (ax#-cx#)*(dy#-cy#)
   rd# = (bx#-ax#)*(dy#-cy#) - (by#-ay#)*(dx#-cx#)

    sn# = (ay#-cy#)*(bx#-ax#) - (ax#-cx#)*(by#-ay#)
    intersection_ab# = rn# / rd#
    intersection_cd# = sn# / rd#
    intersection_x#  = ax# + intersection_ab#*(bx#-ax#)
    intersection_y#  = ay# + intersection_ab#*(by#-ay#)

   If(rd# = False Or intersection_ab#<0 Or intersection_ab#>1 Or intersection_cd#<0 Or intersection_cd#>1)
      Return(False)
   Else
      Return(True)
   EndIf
End Function


Ist aber wie gesagt nicht von mir nur von mir umgeschrieben!

Tom

BeitragDi, Jun 08, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
also...nun ja... auch wenn ich teilweise nich alles sooo verstanden habe, wie ihr es meint, bin ich euch dafür trotztdem dankbar! Smile
also dann,
danke nochmals und
bis dann .

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group