Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bild auf Bild ausrichten

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 03.06.2014, 14:17    Titel: Bild auf Bild ausrichten Antworten mit Zitat

Folgendes Problem: Ich möchte einen Pfeil auf ein Objekt zeigen lassen, dazu schrieb ich diesen Code:
Code:
dy = DeltaYaw(objekt1,objekt2)
dp = DeltaPitch(objekt1,objekt2)
tAngle = ((ATan2(-dy,dp)+360) Mod 360)
MultiPut(0,xmax/2,ymax/2,PfeilPtr,1,1,tAngle,1)

DeltaYaw und DeltaPitch geben mir den Winkel, der für eine Drehung von Objekt1 auf Objekt2 notwendig ist, siehe auch:
DeltaYaw
DeltaPitch

Dummerweise funktioniert das ganze nicht so wie es soll. Der Pfeil zeigt auf einen Punkt im Nirgendwo, aber nicht auf das gewünschte Objekt("objekt2" im Code).

Ich hänge jetzt schon seit Stunden an diesem Code und komme nicht weiter, vielleicht kann mir ja hier jemand helfen? lächeln

mfg, Westbeam
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 03.06.2014, 16:02    Titel: Antworten mit Zitat

Der Rückgabewert von ATAN2 ist ein DOUBLE-Wert, der eine Winkelangabe im Bogenmaß darstellt. Er liegt im Bereich von -Pi bis +Pi.

Multiput erwartet Vielleicht eine Grad Zahl. Vielleicht liegt es daran?
Mach mal eine Umrechnung.

Code:

const PI as double = 3.1415926535897932
Grad=Bogenmass / PI * 180


Zuletzt bearbeitet von RockTheSchock am 03.06.2014, 16:05, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 562
Wohnort: Jüterbog

BeitragVerfasst am: 03.06.2014, 16:04    Titel: Antworten mit Zitat

Da du Multiput benutzt, gehe ich mal von einer 2D Geschichte aus...
Ein kleiner Auszug aus meiner Rotationskrückensammlung:
vielleicht hilfts:
Die Funktion gibt einen Richtungsvektor aus, lässt sich aber schnell zur Ausgabe des Bogenmaßes bewegen, aus dem dann der Winkel berechnet werden kann.
es gilt das kartesische Koordinatensystem!!!

Code:
const as single doublepi  =atn (1) * 8

type vector
  x as single
  y as single
end type

'Liefert die Richtung zu dest als Vector mit Länge 1
'eine Lösung ohne Längenermittlung und Wurzelziehen, vermutlich nicht schneller
function GetDirectionVector (origin as vector,dest as vector) as vector
  dim as single Rad
  dim as vector d
  d.x= dest.x - origin.x
  d.y= dest.y - origin.y
  Rad=atan2(d.y,d.x)'mittels ATAN2 zu Bogenmaß wandeln
  if sgn(Rad)=-1 then Rad= doublepi + Rad'Bogenmaß zu einem Wert zwischen 0 bis 2*PI bringen
  'Vektor d brauchen wir nicht mehr und nutzen ihn anders:
  'Bogenmaß wieder zurück zu einem Vektor wandeln
  d.x=cos(Rad)
  d.y=sin(Rad)
  'd zeigt immernoch von origin aus gesehen in Richtung dest, hat aber jetzt die Länge von 1
  function=d
end function


Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 03.06.2014, 16:07    Titel: Antworten mit Zitat

Ändert leider nicht viel :/

Der Pfeil zeigt immer auf die selbe Stelle, egal auf welche Koordinate er eingestellt ist.

@Muttonhead: Tut mir Leid, habe deinen Post erst nicht gesehen. Dein Code hilft mir leider nicht, da bei dem ganzen Spaß auch der Drehwinkel des Quellobjekts ausgewertet werden muss. Also praktisch die Kamera. Wenn ich die bewege, muss sich der Pfeil ja wieder drehen. Habe ich im ersten Post vergessen. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 03.06.2014, 18:10    Titel: Antworten mit Zitat

Ich habe da jetzt nicht rumprobiert, aber folgende Vorschläge, um das Problem einzugrenzen:

  • Einsatz von MultiPut mit vorgegebenen Winkeln (z. B. in einer Schleife von 0 bis 360 oder von 0 bis 3.14), um zu testen, ob es mit den korrekten Winkeln funktioniert
  • Berechnung der Winkel mit den ersten drei von dir geposteten Zeilen und Ausgabe mit PRINT, um zu testen, ob überhaupt die richtigen Winkelausgaben herauskommen (wie RockTheSchock schon sagte, sind das Bogenmaßangaben, also brnigt dir auch MOD 360 hier nichts).

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 03.06.2014, 18:27    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Einsatz von MultiPut mit vorgegebenen Winkeln (z. B. in einer Schleife von 0 bis 360 oder von 0 bis 3.14), um zu testen, ob es mit den korrekten Winkeln funktioniert

Das Pfeilbild wird definitiv gedreht, aber es zeigt immer auf einen unsinnigen Punkt mitten im Nichts. Der Pfeil dreht sich auch mit, sobald ich die Kamera bewege. Er dreht sich auch richtig, aber halt auf die falsche Koordinate.

Zitat:
Berechnung der Winkel mit den ersten drei von dir geposteten Zeilen und Ausgabe mit PRINT, um zu testen, ob überhaupt die richtigen Winkelausgaben herauskommen (wie RockTheSchock schon sagte, sind das Bogenmaßangaben, also brnigt dir auch MOD 360 hier nichts).

Wenn ich den Code so umschreibe:
Code:
dy = DeltaYaw(objekt1,objekt2)
dp = DeltaPitch(objekt1,objekt2)
tAngle = ((ASin(dy/dp)))

Erhalte ich Werte von 0 bis 20 für tAngle(darüber hinaus wird nur "-nan" ausgegeben)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 03.06.2014, 18:49    Titel: Antworten mit Zitat

Hmm, ASIN ist ja auch eine völlig andere Rechenoperation als ATAN ...

Wenn du mir mal eine Skizze machst, was die Werte DeltaYaw und DeltaPitch darstellen und welcher Winkel dann gesucht ist, kann ich vielleicht weiterhelfen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 03.06.2014, 19:05    Titel: Antworten mit Zitat

Oh natürlich tut mir Leid, das ASin ging aus einem Experiment hervor. Mit ATan2 erhalte ich Werte von -180 bis 180.



Ich kann nicht zeichnen ich weiß. traurig
Der rote Punkt unten links ist die bewegliche Kamera, der andere rote Punkt ist das Zielobjekt, auf das der Pfeil zeigen soll.
Winkel Alpha will ich haben.

Edit: Das ist ein Delta-Winkel, der Winkel, der für eine Drehung der Kamera zum Objekt notwendig ist:


Edit2: Okay der liebe angros47 aus dem englischen Forum hat mir geholfen ... Offenbar hatte ich das gleiche Problem 3 Jahre zuvor:
Code:
ATan2(-dy,dp)) *57
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz