Darstellung von Vektoren

MasterHimself

Mitglied
Hallo Zusammen,

ich habe eine eigene kleiner 3D Engine geschrieben, um in ihr die Vektorrechnug anschaulich zu machen. Nun stehe ich vor dem Problem, das ich einen Vektor nicht als Linie, sondern als 6 seitiges Prisma einfügen möchte, die Punktberechnug ist nicht das Problem. So nun möchte ich aber natürlich auch das jeder Punkt des Körpers entprechend der Richtung des Vektors gedreht wird. Eine Methode für die Drehung ist auch fertig, allerding fehlt mir der Winkel um den ein Vektor gedreht wurde, Also praktich wenn ich die Richtungskoordinaten des Vektores habe, das er um xx° um x rotiert hat um yy° um y rotiert hat, und um zz° um z rotiert hat, weiß da jemand eine Lösung?

<edit>
Also nach langen recherchen komm ich bei dem Ansatz zu keinem brauchbaren Ergenis, hat jemand ne idee wie man die Koordinaten eines 6 seitigen Prismas berechnen kann? Um das ganze noch zu verschärfen muss das Prisma auch noch in n Primen teilbar sein, da ich nur so einen ordentlichen Wert für den Z buffer bekomme.

Danke im voraus und Grüße
 
Zuletzt bearbeitet:
Es geht dabei halt um einen Wettbewerb, und deshalb will ich um die Vektorrechnung am praktischen Beispiel zu zeigen ne 3D Engine schreiben. Ausserdem brauch ich eine Engine ohne Culling (wegfallen von Polygonen die vom Betrachter weg zeigen) und mit einem speziellen Z-Buffer. Die Engine an sich ist nicht das Problem, bloß ich weiß absolute nicht wie ich einen Vektor hinein bauen soll, der korekt angezeigt wird...

<edit>

Das Problem hat sich wesentlich vereinfacht, allerdings fehlt mir noch die Transfornmation der y Koordinate, da sonst das ganze platt wird, wie man an der x und z achse sehen kann

Code:
package src.gui.engine;

import src.math.vektor.*;
import src.containers.*;

public class SKLinie {
private static final double radius = 0.15;
private Punkt[][] points;

     public SKLinie(Punkt p1,Vektor v1){
    	 points = new Punkt[21][7];
     
       new SKKugel(p1);
    	 for(int j = 0;j < 20;++j){
    	      for(int i = 0;i < 6;++i){
    		     points[j][i] = new Punkt(radius*Math.cos(i*Math.PI/3),
    		    		                  radius*Math.sin(i*Math.PI/3),
    		    		                  (v1.getY()*j/20d)+radius*Math.asin(0));
    		     points[j][i] = new Punkt(points[j][i].getX1(),
    		    		                  points[j][i].getX2(),
    		    		                  points[j][i].getX3()); 
    		    points[j][i] = new Punkt(points[j][i].getZ()+(v1.getZ()*j/20d)+p1.getZ(),
    		    		                 points[j][i].getX()+(v1.getX()*j/20d)+p1.getX(),
    		    		                 points[j][i].getY()+(v1.getY()*j/20d)+p1.getY());
    	      }
    	 }
    	 for(int i = 1;i < 6;++i)
    		 for(int j = 1;j < 20;++j){
    			 PolygonContainer.add(new SKPolygon(new SKPoint(points[j][i]),
    					                            new SKPoint(points[j][i-1]),
    					                            new SKPoint(points[j-1][i-1]),
    					                            new SKPoint(points[j-1][i]),SKSettings.getColor()));
    			 if(i == 5)
    				 PolygonContainer.add(new SKPolygon(new SKPoint(points[j][5]),
	                            new SKPoint(points[j][0]),
	                            new SKPoint(points[j-1][0]),
	                            new SKPoint(points[j-1][5]),SKSettings.getColor()));
    		 }
    			 

     }

}
 

Anhänge

  • EngineDemoUser.zip
    14,9 KB · Aufrufe: 15
Zuletzt bearbeitet:
Zurück