Kollision mit Line (Linien) !
Übersicht

![]() |
TomBetreff: Kollision mit Line (Linien) ! |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi !
Tafelwerk ist Teufelswerk ![]() 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 ! ![]() >War informativ und nett gemeint< Toni |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schnell und einfach: ImageRectCollide | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
blitzbase -> code ->"linienkollision" | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Master King of |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Hubsi
Mit ImageRectCollide funktioniert das aber nur wenn die Linie nicht schräg ist!!! |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Mattis_the_brain |
![]() Antworten mit Zitat ![]() |
---|---|---|
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^^ | ||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
also...nun ja... auch wenn ich teilweise nich alles sooo verstanden habe, wie ihr es meint, bin ich euch dafür trotztdem dankbar! ![]() also dann, danke nochmals und bis dann . |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group