# Vec3D



## shino (24. Okt 2009)

Hallo zusammen,
Ich muss für die Uni eine neue Klasse Vec3D für dreidimensionale Vektoren implementieren. dabei muss ich die länge, das skalarprodukt (dot product), multiplikation, addition realisieren. danach sollt ich dann ein programm schreiben, die das ganze auch testet obs stimmt. 

nun scheitere ich aber schon bei der klasse

```
public class Vec3D {
  double x;
  double y;
  double z;
  Vec3D(double v1, double v2, double v3) { x=v1; y=v2; z=v3; }
  Vec3D(Vec3D v) { x=v.x; y=v.y; z=v.z; }
  Vec3D add(Vec3D v) { return new Vec3D( v.x+x, v.y+y, v.z+z );}
  Vec3D multiply(double s) { return new Vec3D (s*v.x, s*v.y, s*v.z );}
  Vec3D dotProduct(Vec3D v) { return new Vec3D( x*v.x, y*v.y, z*v.z );}
  Vec3D norm() {return new double[ norm = Math.sqrt(v.x*v.x+v.y*v.y+v.z*v.z)];}
  public String toString() { return "( " + this.x + "," + this.y + "," + this.z + " )"; }
}
```

ich weiss einfach nicht, wo der fehler ist, bzw. was ich machen muss, das es läuft... sieht jemand von euch dahinter und kann mir helfen?

mfg


----------



## Marco13 (24. Okt 2009)

Ja, was sagt er denn bei "multiply", und woran könnte das Liegen. Und bei "norm" ... manchmal muss eine Methode auch mehrere Zeilen haben ... z.B. sowas wie
Erstelle neuen Vektor, der genau so ist wie "this"
Skaliere den neuen Vektor mit 1/länge
Gib den neuen Vektor zurück.


----------



## shino (24. Okt 2009)

na, irgendwie denk ich, ich hab was gescheites hingekriegt  

```
class Vec3D {
  double x;
  double y;
  double z;
  Vec3D(double v1, double v2, double v3) { x=v1; y=v2; z=v3; }
  Vec3D add(Vec3D v) { return new Vec3D( v.x+this.x, v.y+this.y, v.z+this.z );}
  Vec3D multiply(double s) { return new Vec3D( s*this.x, s*this.y, s*this.z);}
  Vec3D dotProduct(Vec3D v) { return new Vec3D( this.x*v.x, this.y*v.y, this.z*v.z );}
  double norm() {return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);}
  public String toString() { return "( " + this.x + "," + this.y + "," + this.z + " )"; }
}
```

sieht doch eigentlich schon ganz ok aus  
nun, ich sollte jetzt noch ein programm basteln, dass das ganze oben auch auf die funktionalität testet.
ich hab mir das so gedacht, das ich in der konsole eigentlich x, y, z eingeben muss und er mir danach von dem vektor alles ausgibt, das ich oben implementiert habe. 


```
public class Vectors {
  public static void main(Double[] args) {
    double x = args[0];
    double y = args[1];
    double z = args[2];
  }
}
```
 so sieht der bisherige teil aus. ich bin tatsächlich noch ziemlicher anfänger mit solchen dingen. wie muss ich weiter vorgehen, was sind die fragen die ich mir stellen muss, was muss ich weiterhin noch beachen? ich habe keine idee wie ich das ganze problem jetzt angehen soll..? kann mir da jemand nen ratschlag geben was als nächstes zu tun ist? stehe gerade echt total aufm schlauch und müsst heut noch ein zweites programm (PriorityQueue) schreiben...  

danke schon im vorraus ^^


----------



## Landei (24. Okt 2009)

Kleiner Tipp: Schreib erst mal eine Version, die für zwei fest vorgegebenen Vektoren alles überprüft. Wenn das ordentlich läuft, kümmere dich um die Eingabe (ob jetzt Konsole oder 6 Kommandozeilenargumente ist eigentlich wurscht).

Übrigens solltest du dir Gedanken über die Sichtbarkeit deiner Methoden machen. Alles, auf das von außen zugegriffen werden kann, sollte public sein, alles andere private. Ich würde z.B. x,y,z private machen, und dafür drei public Methoden getX, getY, getZ implementieren (den Vektor also unveränderlich machen).


----------



## shino (24. Okt 2009)

hmm danke für die tipps. ich denk, ich habs langsam hingekriegt  zumindest mit festen vektoren und ich hoff der umbau sollte nun ein leichtes sein. hab mich für die kommandozeilenargumente entschieden, das sollte erstmal reichen 

danke für die hilfe


----------

