Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

01.08.2013, 01:35

Vektor mit vier Komponenten normieren

Ich möchte heute meine "Vector4" Klasse abschließen. Ich weiß nur nicht genau, wie ich einen Vektor mit vier Komponenten normalisieren normieren soll.
Welche der folgenden Beispiele ist das richtige? Wenn überhaupt eins davon richtig ist.

C-/C++-Quelltext

1
2
Vector4 v;
v = v / sqrtf(v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w);


C-/C++-Quelltext

1
2
3
Vector4 v;
v.xyz = v.xyz / sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
// v.w unverändert


Danke im Voraus!

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FSA« (01.08.2013, 17:43)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.08.2013, 01:41

Die erste Variante ist die richtige.

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

01.08.2013, 01:46

Danke

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

4

01.08.2013, 17:33

Erstmal, was du da machst, nennt sich auch normieren. Ein normierter Vektor hat im Bezug auf eine bestimmte Norm die Laenge 1. Die "Richtige" Normierung ist daher Definitionssache. Was dot beschreibt ist die euklidische Norm fuer n-dimensionale Vektoren. Es kann aber gut sein, das du eine ganz andere Norm brauchst, weil die meisten praktischen Anwendungen nicht die 4-dimensionale Entfernung als Norm erfordern.

5

01.08.2013, 19:50

Ich frage mich ein bisschen, ob du weiß was du tust, oder ob du dir einfach in den Kopf gesetzt hast, eine 4D-Vektorklasse zu schreiben ("und normieren gehört nunmal dazu"...).
In der Computergrafik hast du normalerweise nur 2D oder 3D Vektoren. 4D brauchst du erst, sobald du einen Vektor mit einer Matrix transformieren willst und dann ist die vierte Komponente quasi immer 0 oder 1. Einen vec4 kann man sonst auch mal für Farben verwenden, aber was möchtest du da normieren?

Ich meine, wenn du dich schon fragst, wie du den richtig normieren sollst, zeigt das, dass du nicht weißt, wie du damit rechnen sollst, denn sonst wüsstest du ja warum du normieren musst und damit auch wie.

Mein Vorschlag: Es reicht, wenn du 2D und 3D Richtungsvektoren normieren kannst. Lass es einfach ganz weg, und baue dir erst dann deinen Vek4, wenn du ihn brauchst. (In den meisten Fällen macht übrigens Variante 2 das, was du willst. Ob richtig oder falsch kann man nicht sagen, das hängt davon ab, was du denn ausrechnen willst).
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

01.08.2013, 20:37

Die Fälle, wo Variante 2 macht, was man gerne hätte, sind wohl genau die Fälle, wo man sowieso keinen 4D Vektor hätte verwenden wollen... ;)

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

7

01.08.2013, 22:33

Zitat von »Jonathan_Klein«


ich meine, wenn du dich schon fragst, wie du den richtig normieren sollst, zeigt das, dass du nicht weißt, wie du damit rechnen sollst

Ist es normal, dass man hier bei einer Frage sofort unterstell bekommt, dass man die komplette Thematik nicht beherrscht? ;)
Ich hätte vielleicht dazuschreiben sollen, in welchem Szenario ich normieren will. Da es gestern schon 1:35 in der Nacht war, habe ich etwas auf dem Schlauch gestanden. Heute konnte ich mir die Frage selbst beantworten.

Zitat von »Jonathan_Klein(abgeändert)«


4D brauchst du erst, sobald du einen Vektor mit einer Matrix transformieren willst

Das ist in meinem Fall nicht richtig. Ich brauche die vierte Komponente, um mit einer Normalen und einer Tangente die Binormale zu berechnen.

Und warum unterstellst du mir, dass ich noch keine Vector4 Klasse benötige?

Zitat von »Jonathan_Klein«

Lass es einfach ganz weg, und baue dir erst dann deinen Vek4, wenn du ihn brauchst.


Aber gut ich habe dazugelernt. Was TGGC schrieb war sehr hilfreich. Ich werde in Zukunft mir nochmals eine Lösung überlegen und austesten. Es ist mir lieber, als gleich wieder als Anfänger in der 3D Mathematik abgestempelt zu werden. :)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

8

01.08.2013, 22:41

Zitat von »Jonathan_Klein«


ich meine, wenn du dich schon fragst, wie du den richtig normieren sollst, zeigt das, dass du nicht weißt, wie du damit rechnen sollst

Ist es normal, dass man hier bei einer Frage sofort unterstell bekommt, dass man die komplette Thematik nicht beherrscht? ;)

War das mal anders? o.O
Ich frage aus diesem Grund grundsätzlich so selten wie möglich hier.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

01.08.2013, 23:02

Vielleicht ist es wieder Zeit für einen "Wir wollen uns ab jetzt wieder alle mehr benehmen" Thread;)
Ne mal Spaß bei Seite. Wenn da Gesprächsbedarf ist, dann macht gerne einen Thread dafür auf. Weiterhin möchte ich aufzeigen, dass ihr Leute privat anschrieben könnt falls sie unfreundlich sind. Wichtig ist, freundlich darauf hinzuweisen und einfach mal zu fragen was da los ist. Sicherlich kann man da kleinere Probleme auch gut selbst klären. Natürlich hat man auch die Möglichkeit Mods anzuschreiben wenn einzelne sich schlecht benehmen. Und auch wenn ein Mod sich mal schlecht benimmt darf man diesen gern anschreiben. Moderatoren sind auch nur Menschen, und selbst David ist angeblich auch nur ein ganz normaler Mensch mit dem man sprechen kann. Bei Problemen ist es oft besser untereinander darüber zu reden, anstatt das ganze öffentlich in einem Thread zu machen. Hat alles Vor- und Nachteile.
Ich denke FSA konnte seinen Standpunkt hier schon gut klar machen. Und jetzt zurück zum Thema;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

02.08.2013, 07:02

Das ist in meinem Fall nicht richtig. Ich brauche die vierte Komponente, um mit einer Normalen und einer Tangente die Binormale zu berechnen.

Du stellst doch aber sicher nichts in einem 4-dimensionalen Raum graphisch dar (die Zeit wird ja nicht dargestellt). Somit ist Deine Normale doch eigentlich auch nur ein Vektor mit 3 Komponenten und die Tangente und Binormale somit ebenfalls. Wenn nicht, klär mich mal auf.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige