Linien Kollision 2d [erledigt]

Anfängerfragen zum Programmieren mit PureBasic.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Linien Kollision 2d [erledigt]

Beitrag von a14xerus »

Ich habe ein Problem...
Sagen wirmal ich habe ein schwarzes Sprite.
Darauf ist eine LineXY in "nicht-schwarz"..
Jetzt kommt eine andere Linie die anhalten soll, sobald sie die erste Linie berührt.
Wie kann ich das machen??
mit Point geht es nicht, da pro frame mehrere Pixel übersprungen werden.
Danke im Voraus
Zuletzt geändert von a14xerus am 28.11.2007 07:48, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Das müsste eigentlich ganz einfach und exakt mit ein bisschen
Vektorrechnung gehen. Bin aber grad zu faul um mich da hinzusetzen.
Morgen vielleicht.

Ansonsten kann ich noch auf meine uralten Kollisionsroutinen verweisen:
Schnelle Kollisionsroutinen
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Jup genau, entweder dieser LINK da, kannst aber auch meine benutzen, extra für Strecke-Strecke-Kollision:

Code: Alles auswählen

;Vektorstruktur
Structure Vektor2D
 x.f
 y.f
EndStructure
;Strecke  |--|
Structure Strecke
 Position.Vektor2D
 Richtung.Vektor2D ; WICHTIG, damit wird auch die exakte länge der Strecke festgelegt
EndStructure 
;Punkt
Structure Punkt
 Position.Vektor2D
EndStructure

Procedure ParameterStrecke(*Strecke.Strecke,x,y,xx,yy)
 *Strecke\Position\x = x
 *Strecke\Position\y = y
 *Strecke\Richtung\x = xx
 *Strecke\Richtung\y = yy
EndProcedure

Procedure SchnittpunktStreckeStrecke(*Strecke1.Strecke, *Strecke2.Strecke, *Punkt.Punkt)
 u.f : o.f : i.f : j.f
 u = *Strecke1\Richtung\x * *Strecke2\Richtung\y - *Strecke1\Richtung\y * *Strecke2\Richtung\x
 If u
  o = (*Strecke2\Position\x - *Strecke1\Position\x) * *Strecke2\Richtung\y + (*Strecke1\Position\y - *Strecke2\Position\y) * *Strecke2\Richtung\x
  i = (o/u)
  If i>=0 And i<=1
   u = *Strecke2\Richtung\x * *Strecke1\Richtung\y - *Strecke2\Richtung\y * *Strecke1\Richtung\x
   o = (*Strecke1\Position\x - *Strecke2\Position\x) * *Strecke1\Richtung\y + (*Strecke2\Position\y - *Strecke1\Position\y) * *Strecke1\Richtung\x
   j = (o/u)
   If j >= 0 And j<=1
    *Punkt\Position\x = *Strecke1\Position\x + i * *Strecke1\Richtung\x
    *Punkt\Position\y = *Strecke1\Position\y + i * *Strecke1\Richtung\y
    ProcedureReturn 1   
   Else
    ProcedureReturn 0
   EndIf
  Else
   ProcedureReturn 0
  EndIf
 Else
  ProcedureReturn 0
 EndIf  
EndProcedure
Beispiel:

Code: Alles auswählen

Strecke1.Strecke
Strecke2.Strecke
ParameterStrecke(Strecke1, 0,0,100,100)
ParameterStrecke(Strecke2, 100,0,-100,100)
; Entspricht den Parametern von Line(x, y, Breite, Höhe [, Farbe]))

Punkt.Punkt
If SchnittpunktStreckeStrecke(Strecke1, Strecke2, Punkt)
 Debug "KOLLISION"
 Debug "bei ( "+StrF(Punkt\Position\x)+" | "+StrF(Punkt\Position\x)+" )"
Else
 Debug "KEINE Kollision"
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

ich gucks mir heute mittag mal genauer an und guck ob ichs verstehe.
Auf jedenfalls Danke schonmal :)
Antworten