3D - Kilometerzähler "bauen" [GELÖST]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: 3D - Kilometerzähler "bauen" [GELÖST]

BeitragDi, Dez 07, 2010 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich bin gerade an folgendem Problem: Ich brauche einen Kilometerzähler. Ich habe mir dazu schon gedanken gemacht, und zwar:

- (geschwindigkeit * gefahrene zeit)

dann wird also die geschwindigkeit mal die gefahrene zeit (ein zähler erhööht sich pro schleifen-durchlauf, hat er die FPS zahl erreicht, ist 1 sekunde verstrichen (hoffe ich)), nur danach komme ich nicht weiter, durch welche zahl muss geteilt werden?

Hat jmd. von euch schonmal einen kilometer-zähler gebaut?

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
  • Zuletzt bearbeitet von CO2 am Di, Dez 07, 2010 21:57, insgesamt einmal bearbeitet

ToeB

BeitragDi, Dez 07, 2010 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo. Hab ich grad eine Physik-Klausur drüber geschrieben, deshalb kann ich dir das mal erklären Wink

Du musst im 3D Raum deine Mas-Einheuit festlegen. Also z.B. 1 Unit = 1 Meter. Dann errechnest du die Geschwindigkeit von deinem Object (Wenns ein Fahrzeug ist Radumfang (2 * Radius * PI) * umdrehungen des Rades).

Jetzt musst du nur noch Zeitintervalle festlegen, z.B. 250ms. Immer nach 250ms machst du das hier :
Code:
kilometer_gefahren = Kilometer_gefahren + (Geschwindigkeit * 250) / 1000.0


Geschwindigkeit in m/s und 250 in s, dann kürzt sich das s weg und es bleiben (Geschwindigkeit*250)m übrig. dass noch durch 1000 und du hast die Kilometer.

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!

Ana

BeitragDi, Dez 07, 2010 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du eine FPS wert von 60 hast bedeutet das ein Frame pro 1/60 Sekunde also kannst du um die Zeit zu erhalten Frameanzahl/60 = Zeit nutzen, oder nicht? Das setzt du dann in deine Formel ein und bekommst

Geschwindigkeit * (Framzahl/60) = Strecke * Sekunden

Wenn du nun eventuell Km haben willst braucht du also Stunden, weil du vermutlich in km/h rechnen möchtest

Wäre dann sekunden/60 = Minuten ; Minuten/60 = Stunden => sekunden/3600 = Stunden

=> Geschwindigkeit * Framezahl/216000 = Strecke in km

will aber nicht dafür garantieren dass das so stimmt würde mir nur so spontan einfallen

Edit: Sieht so aus als wüsste Toeb wovon erredet, ich würde seine variante nehmen, zumal ich davon ausgehe das du die geschwindigkeit kennst und nur die einheiten umforme und physik nie meine große leidenschaft war. lg Ana
Don't only practice your art,
but force your way into its secrets,
for it and knowledge
can raise human to divine
 

Krischan

BeitragDi, Dez 07, 2010 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ich hatte das bei meinem Zwerg in BlitzTiles relativ einfach gelöst (alle BT_ Variablen sind Globals)

Code:
Function BT_CalcSpeed#()
   
    Local ms%=MilliSecs()
   
    ; check each second
    If ms>BT_SpeedTimer+1000 Then
       
        ; store current position
        BT_NewX=BT_PlayerX
        BT_NewY=BT_PlayerY
        BT_NewZ=BT_PlayerZ
               
        ; calculate BT_Distance between current and old position
        BT_CurrentSpeed=BT_Distance(BT_OldX,BT_OldY,BT_OldZ,BT_NewX,BT_NewY,BT_NewZ)*3.6
       
        ; store old position
        BT_OldX=BT_PlayerX
        BT_OldY=BT_PlayerY
        BT_OldZ=BT_PlayerZ
               
        ; reset timer
        BT_SpeedTimer=ms
       
    EndIf
   
End Function

Function BT_Distance#(x1#,y1#,z1#,x2#,y2#,z2#)
   
    Return Sqr((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2))
   
End Function


Also alte Position gespeichert, immer 1x Pro Sekunde die Distanz zwischen alter und neuer Position gemessen, Timer zurückgesetzt und als Ausgabe dann einfach den BT_CurrentSpeed als "km/h". Hatte bei meinen weiträumigen Szenen zumindest halbwegs realistische Werte gebracht. Allerdings waren die Szenen da auch metergenau in der Skalierung (und der Zwerg genau 1.4 meter gross)
 

CO2

ehemals "SirMO"

BeitragDi, Dez 07, 2010 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, besten dank!

ich werde mal alle vorschläge ausprobieren
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Eingeproggt

BeitragDi, Dez 07, 2010 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sagtmal... Hab ich die Frage nicht verstanden oder denkt ihr zu kompliziert?
Wir bewegen den LKW in jedem Frame um einen gewissen Wert in x-y-z-Richtung (mit MoveEntity - auf dessen Parameter ich mich jetzt beziehe)
Die Distanz die er zurück legt ist daher Sqr(move_x*move_x+move_y*move_y+move_z*move_z)

Tja und das wars auch schon wieder. Eine Zählvariable die man jeden Frame / jedes UpdateWorld um eben diesen Wert erhöht und fertig. Das sind dann unsere Einheiten, wie schon so oft vorgeschlagen die Meter.

BlitzBasic:
distanz#=distanz#+Sqr(move_x#*move_x#+move_y#*move_y#+move_z#*move_z#)


mfG, Christoph

EDIT: Kann es sein, dass im Startpost eh schon dasselbe steht, nur anders formuliert? Na jedenfalls wüßte ich nicht, in wiefern da die Zeit eine Rolle spielt wenn man die MoveEntity-Werte hernimmt? *verwirrt bin*
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
  • Zuletzt bearbeitet von Eingeproggt am Di, Dez 07, 2010 20:17, insgesamt einmal bearbeitet

ToeB

BeitragDi, Dez 07, 2010 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja stimmt Very Happy War zusehr heute mit Physik beschäftigt oO

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!
 

CO2

ehemals "SirMO"

BeitragDi, Dez 07, 2010 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach ich dussel Very Happy Die Formel hatten wird schonmal inne fahrschule, und zwar geht die so:

(geschwindigkeit / 10) * 3 = meter pro sekunde Very Happy Aber ich hätte trotzdem noch ne frage: inwieweit muss ich die formel verändern um den weg pro hundertstel sekunde zu berechnen? einfach das ergebnis nochmal mal hundert rechnen, oder was?

mfG,
CO2
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Xeres

Moderator

BeitragDi, Dez 07, 2010 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du schon Einheiten einführst, rechne mit ihnen:
1 km = 1000 m
1 h = 60 min * 60 s = 3600 s
Bsp: 10 km/h
= 10 * 1000 m / 3600 s
= 10 * (1/3.6) m/s
= 2.78 m/s

Dann kommt auch garantiert immer das Richtige bei raus. Benutzte keine Pi mal Daumen Regeln.
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)
 

CO2

ehemals "SirMO"

BeitragDi, Dez 07, 2010 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, besten dank, werd ich so umsetzen Very Happy
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group