Linie zwischen zwei Objekten ziehen (gelöst)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

canny771

Betreff: Linie zwischen zwei Objekten ziehen (gelöst)

BeitragMo, Jun 06, 2011 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
ich habe mal wieder ein Problem.
Ich möchte in einem dreidimensionalen Raum eine "Linie" (Es handelt sich um eine Art Kreuzmesh, welches ich in Blender modelliert habe) zwischen zwei frei bewegbaren Objekten ziehen.
Der Code, den ich geschrieben habe, funktioniert nicht und ich weiß nicht wieso. Die Linie "durchstößt" das andere Objekt, wenn der Abstand groß ist. Wenn er zu klein ist, erreicht er es nicht einmal.
Auch anderweitig kommen noch Fehler mit der Länge zu Stande.
Mein Ansatz war der Satz des Pythagoras.
Vielleicht kann mir ja jemand helfen.
Vielen Dank schon mal im Voraus.
MfG Canny771


Code: [AUSKLAPPEN]

PositionEntity Strahl,EntityX(P1),EntityY(P1),EntityZ(P1)
      PointEntity Strahl,P2
      code12345=Sqr((EntityX(P2)-EntityX(P1))*(EntityX(P2)-EntityX(P1)))+((EntityZ(P2)-EntityZ(P1))*(EntityZ(P2)-EntityZ(P1)))
      ScaleEntity Strahl,1,1,code12345+2
  • Zuletzt bearbeitet von canny771 am Mo, Jun 06, 2011 19:29, insgesamt einmal bearbeitet
 

Tigerass

BeitragMo, Jun 06, 2011 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schätze mal auf einen Rundungsfehler. Hast du integer anstatt float verwendet?
Ist aber nur eine Idee. Probiere es einfach mal aus.

LG Tigerass

ZaP

BeitragMo, Jun 06, 2011 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch den normalen Line Befehl dafür nehmen, wenn Du die 2D Punkte der Linie mittels CameraProject ausrechnen lässt.
Starfare: Worklog, Website (download)

canny771

BeitragMo, Jun 06, 2011 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@Zap: Fällt das nicht auf, dass die Linie nicht wirklich zwischen den beiden Objekten ist sondern nur zweidimensional zwischen ihnen liegt?

@Tigerass: Muss ich mal kontrollieren.

Xeres

Moderator

BeitragMo, Jun 06, 2011 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Einen vorgefertigter Mesh würde ich nicht benutzen, sondern lieber mit AddVertex usw. direkt lösen.
Deine Rechnung ist falsch (Y fehlt) - aber dafür gibt es auch EntityDistance.
Außerdem solltest du deine Variablenbenennung überdenken - code12345 sagt am ehesten noch aus, dass du nicht wirklich weißt, was das Ergebnis der Rechenoperation ist.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

canny771

BeitragMo, Jun 06, 2011 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Tigerass: Du hattest natürlich recht, aber die Auswirkung war nur minimal und nicht entscheident.
Trotzdem danke.

@Xeres: Das Y fehlt spielt keine Rolle, da die Objekte, was ich vergessen habe zu posten, auf einer Höhe sind (man kann noch springen, dass ist aber erstmal irrelevant, es geht schon so nicht).
Ich habe auch schon mal die ganze Rechnung weg gelassen und für Z einfach "EntityDistance" eingegeben. Das hatte aber nicht funktioniert.
Das mit dem Mesh mag richtig sein, leider kann ich nicht besonders gut Meshs "einfach so" in BB erstellen
und zu guter letzt weiß ich natürlich was das Ergebnis des Satz des Pys ist.

ToeB

BeitragMo, Jun 06, 2011 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers einfach mal mit EntityDistance.

Außerdem liegt es warscheinlich daran, das dein Mesh schon eine gewisse Anfangsgröße hat. Dein Mesh müsste allerdings genau die größe "1" haben, damit es Funktioniert.

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

canny771

BeitragMo, Jun 06, 2011 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habe es gelöst.

Danke an Alle

Es wundert mich aber trotzdem, dass mein Code vorher nicht funktioniert hat.

Code: [AUSKLAPPEN]

PositionEntity Strahl,EntityX(P1),EntityY(P1),EntityZ(P1)
      PointEntity Strahl,P2
      Code3344#=(Sqr(EntityDistance(P1,P2)*EntityDistance(P1,P2)))/2
      MoveEntity Strahl,0,0,Code3344#
      ScaleEntity Strahl,0.1,0.1,Code3344#

Xeres

Moderator

BeitragMo, Jun 06, 2011 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu Quadrieren und Wurzel ziehen? Da kannst du gleich EntityDistance(P1,P2) / 2 schreiben.
Du kannst deine Variablen ja benennen wie du lustig bist - rechne dann aber nicht damit, das wir in deinem code durchblicken und dir helfen können...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group