Vector Addition

JoeB

Mitglied
Hallo,

ich habe ein Programm geschrieben, dass das Thema Vector umfasst...jedoch bei der Vectoraddition kommt immer nicht das richtige raus. Es gibt ei Ergebnis raus, alleridungs nicht das richtige.
Könnt ihr mir vielleicht helfen? Ich weiß nicht mehr weiter...

Java:
public final class Vector {
	
	/**************************
 		Membervariablen
	 **************************/
	
	private double Direction;
	private double Length;
	
	
	/**************************
 		Konstruktoren
	 **************************/

	public Vector() {
		this.Length = 0.0;
	}
	
	public Vector(double Direction) {
		this.Length = 1.0;
		this.Direction = Direction;
	}
	
	public Vector(double Direction, double Length) {
		if(Length < 0){
            this.Length = -Length;
            this.Direction = Direction+Math.PI;
        } 
		else{
            this.Length = Length;
            this.Direction = Direction;
        }
 
        while(this.Direction >= 2*Math.PI){
            this.Direction -= 2*Math.PI;
		}
	}
	
	/**************************
 		Getter
	 **************************/
	private double getLength() {		
		return Math.abs(this.Length);
	}
	
	private double getDirection() {
		return this.Direction;
	}
	
	
	/**************************
	 	Öffentliche Methoden
	 **************************/
	
	public boolean isNull() {
		// Wenn this.Length dem Wert 0.0 entspricht gebe true zurück, wenn nicht dann false
		return this.getLength() == 0.0 ? true : false;
	}
	
	public boolean isParallel(Vector more) {
		if( (this.isNull()) || (more.isNull()) ) 
		{ return true; }
            if( (near(this.getDirection(), more.getDirection())) || (near(this.getDirection() + Math.PI, more.getDirection())) ||(near(this.getDirection(), more.getDirection() + Math.PI)) ) 
			{ return true; }
                return false;
	}
	
	public boolean isSameAs(Vector more){
	if( (near(this.getLength(), more.getLength())) && (near(this.getDirection(), more.getDirection())) ||((this.isNull()) || (more.isNull())) ) 
	
	{ return true; }
                return false;
	}
	
	public Vector scaledBy(double scale) {
	    return new Vector( scale * this.getLength(), this.getDirection() );
        
	}
	
	Vector add(Vector more) {
	    
		double newLength;
    	double newDirection;
    	double xLength = Math.cos(getDirection()) * getLength();
    	double yLength = Math.sin(getDirection()) * getLength();
    	double xDirection = Math.cos(more.getDirection()) * more.getLength();
    	double yDirection = Math.sin(more.getDirection()) * more.getLength();
    	xLength += xDirection;
    	yLength += yDirection;
    	newLength = to(Math.sqrt(xLength * xLength + yLength * yLength));
    	if(Math.atan2(yLength, xLength) < 0) {
			newDirection = to((Math.atan2(yLength, xLength)) + 2 * Math.PI);
    	}
    	else {
			newDirection = to(Math.atan2(yLength, xLength));
    	}
			return new Vector(newLength, newDirection);
    	
  
	}
	
	public void print(){
		System.out.println("Länge = " + to(this.getLength()) + " ,Direction = " + to(this.getDirection()) + " rad");
	}
	 
    public void print(String prefix) {
        System.out.print(prefix + ": ");
        this.print();
    }
	
	/**************************
 		Private Methoden
	 **************************/
	private boolean near(double val1, double val2) {
		// Differenz der beiden Werte berechnen
		double diference = Math.abs(val1 - val2);
		
		// Prüfung ob Differenz kleiner 1e-8 ist und Rückgabe von true oder false
		return diference < 1e-8 ? true : false;
	}
	private double to(double zahl) {
            if (zahl != Math.PI){
				zahl *= 100000;
				zahl = Math.rint(zahl);
				zahl /= 100000;
				return zahl;
    		}
    		else{
    		return zahl;
    		}
    }
}

Java:
public class VectorMain {

	public static void main(String[] args) {

		double Length1 = Double.parseDouble(args[0]);
		double Direction1 = Double.parseDouble(args[1]);
		double factor1 = Double.parseDouble(args[2]);
		double Length2 = Double.parseDouble(args[3]);
		double Direction2 = Double.parseDouble(args[4]);
		
		Vector v1 = new Vector();
		Vector v2 = new Vector(Length1, Direction1);
		Vector v3 = new Vector(Length2, Direction2);
		Vector v4 = v3.scaledBy(factor1);
        v4.print("V 4");
		Vector v5 = v1.add(v2);
        v5.print("V 5");
 
		
		System.out.println( v3.isNull() );
		
		if(v2.isParallel(v1)) {
            System.out.println("Vector 2 und Vector 1 sind parallel");} 
			else {
             System.out.println("Vector 2 und Vector 1 sind nicht parallel");
                }
	    if(v2.isParallel(v3)) {
            System.out.println("Vector 2 und Vector 3 sind parallel");
        } 
		else { 
			System.out.println("Vector 2 und Vector 3 sind nicht parallel");
        }
 
        if(v2.isSameAs(v1)) {
            System.out.println("Vector 2 und Vector 1 sind gleich");
        } 
		else {
			System.out.println("Vector 2 und Vector 1 sind nicht gleich");
        }
 
        if(v2.isSameAs(v3)) {
			System.out.println("Vector 2 und Vector 3 sind gleich");
        } 
		else {
			System.out.println("Vector 2 und Vector 3 sind nicht gleich");
        }
	
	}

}

Vielen Dank schon mal!
 

muckelzwerg

Bekanntes Mitglied
Warum machst Du das "so"? Du kannst Deinen Vektor ja bauen wie Du magst, aber eigentlich ist ein Vektor sowas wie ein Feld mit einer Anzahl von Koordinaten. Die Länge ergibt sich dann über die Seitenverhältnisse im (meist karthesischen) Koordinatensystem und die Richtung über den Bezug zum Ursprung.
Was würdest Du denn machen, wenn Du einen Vektor für 3D Koordinatensysteme bauen wolltest? Noch eine weitere Richtung einbauen? Polarkoordinaten verwenden?


Wenn Du sagst, es kommt nicht das richtige heraus, dann weißt Du doch, was richtig wäre.
Also schreib mal auf, was Du getestet hast, was dabei herauskommen sollte (Deiner Ansicht nach) und was dann tatsächlich herauskam. :)
 

Dekker

Bekanntes Mitglied
Boa ganz ehrlich, was sind das für Vektoren die du da baust oO.

Für mich ist nach Definition ein Vektor ein n-Elementiges Tuppel (x_1,...,x_n) mit x_n € R. Was du hast, hat einen Wert direction und ne Länge.

Wenn ich das jetzt richtig sehe müssten deine Vektoren also eindimensionale Skalare sein. Von daher verwirrt mich deine Rechnung bei Vektoraddition noch viel mehr.

Erkläre mal nach welchem Ansatz du hier vorgehst, ich denke ich bin nich der einzigste der da nur Bahnhof versteht.

Im übrigen sollten nach Konvention Variablen mit Kleinbuchstaben anfangen. Auch wenn sie private sind.
 

Andi_CH

Top Contributor
Java:
    private double direction; // Variablennamen klein schreiben
    private double length;
    
    
    /**************************
        Konstruktoren
     **************************/
 
    public Vector() {
        length = 0.0;
        direction = 0.0; // sollte auch gesetzt werden
    }
...

Klassenname Vector ist ungeschickt - Vector gibt es schon.

und der Name "direction" in add ist mehr als verwirrend - er ist schlicht falsch.
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
...aber ich will ja konstruktiv sein - für die Vektoraddition ist es besser den Vektor karthesisch zu speichern
Java:
package com.javaforum.test;

public class GeomVectorCart {

	private double mX;
	private double mY;

	public GeomVectorCart() {
		mX = 0.0;
		mY = 0.0;
	}
	public GeomVectorCart(double x, double y) {
		mX = x;
		mY = y;
	}
	public double direction() {
		return Math.atan2(mY, mX);
	}
	public double length() {
		return Math.sqrt(mX * mX + mY * mY);
	}
	public double x() {
		return mX;
	}
	public double y() {
		return mY;
	}
	public void setXY(double x, double y) {
		mX = x;
		mY = y;
	}
	public void setAngLen(double angle, double length) {
		mX = Math.sin(angle) * length;
		mY = Math.cos(angle) * length;
	}
	public GeomVectorCart add(GeomVectorCart vect) {
		double x = this.x() + vect.x();
		double y = this.y() + vect.y();
		setXY(x, y);
		return this;
	}
	@Override
	public String toString() {
		return "[angle = " + Math.toDegrees(direction()) + ", length = " + length() + "] - [x = " + x() + ", y = " + y() + "]";
	}

	public static void main(String[] args) {
		GeomVectorCart vector1 = new GeomVectorCart();
		GeomVectorCart vector2 = new GeomVectorCart();
		System.out.println(vector1);
		System.out.println(vector1.add(vector2));
		vector1.setXY(1, 0);
		vector2.setXY(1, 0);
		System.out.println(vector1.add(vector2));
		vector1.setXY(1, 0);
		vector2.setXY(0, 1);
		System.out.println(vector1.add(vector2));
		vector1.setXY(1, 0);
		vector2.setXY(-1, 0);
		System.out.println(vector1.add(vector2));
		vector1.setXY(1, 0);
		vector2.setXY(0, -1);
		System.out.println(vector1.add(vector2));
		vector1.setXY(1, 1);
		vector2.setXY(1, 1);
		System.out.println(vector1.add(vector2));
		vector1.setXY(-1, 1);
		vector2.setXY(-1, 1);
		System.out.println(vector1.add(vector2));
	}

}
----
Postings von wegen mX sind absolut unnötig und bewirken rein gar nichts!

Und für die die nicht wissen worum es geht - in meiner Software wird es niemals gleiche Namen für unterschiedliche Dinge wie z.B. Parameter und Membervariablen geben. Die Verwechlungsgefahr ist zu gross. Die Meisten hier sind allerdings so obrigkeitsgläubig, dass sie Codierrichtlinien über Fehlerresistenz stellen.
 

Marco13

Top Contributor
Das ursprüngliche 'add' sah schon gefrickelt aus. Unabhängig von der Frage nach der Effizienz: Wenn du eine Methode schreiben würdest, die zwischen der kartesischen- und der Polarkoordinatendarstellung umwandelt, könntest du die isoliert testen, und die Addition könnte dann auf die "einfache" Addition wie im obigen Post zurückgeführt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5
F Vector istGeordnet Java Basics - Anfänger-Themen 15
R Vector-Filterfunktion Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
J Vector Manipulieren.. Wie? Java Basics - Anfänger-Themen 16
M Vector eines Vectors einzeln ausgeben Java Basics - Anfänger-Themen 9
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
J Erzeugung eines Vector-Objekts - Frage zum Typ Java Basics - Anfänger-Themen 3
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
A Author in Vector Java Basics - Anfänger-Themen 22
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
B Globale vector? Java Basics - Anfänger-Themen 7
E 2 Dimensionaler Vector Java Basics - Anfänger-Themen 5
T Map<String, Vector>? Java Basics - Anfänger-Themen 11
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
M 2D Vector Java Basics - Anfänger-Themen 2
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
M Umwandlung von Array in Vector und umgekehrt Java Basics - Anfänger-Themen 6
E Datentypen Klasse Vector aus der Standard-API anwenden Java Basics - Anfänger-Themen 7
D Klasse Vector entwerfen Java Basics - Anfänger-Themen 7
A Arrays vs Liste vs Vector Java Basics - Anfänger-Themen 30
H in for Schleife über Vector iterieren Java Basics - Anfänger-Themen 2
S Datentypen Vector auslesen Java Basics - Anfänger-Themen 12
yampi Objektsammlung - Hashtable, Vector, Arrays Java Basics - Anfänger-Themen 8
T Vector-Positin anzeigen Java Basics - Anfänger-Themen 3
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
C Datentypen Probleme mit Vector.contains() Java Basics - Anfänger-Themen 10
M Datentypen function(Vector<SuperClass>), Vector<Subclass> Java Basics - Anfänger-Themen 6
L Vector Sortieren Java Basics - Anfänger-Themen 8
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
B Werte einer Spalte aus DB in einen Vector schreiben Java Basics - Anfänger-Themen 15
kitz Telefonbuch (Vector) Java Basics - Anfänger-Themen 17
E Arraylist mit Daten aus Vector füllen Java Basics - Anfänger-Themen 7
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
F Vector wird überschrieben Java Basics - Anfänger-Themen 8
T Vector sortiern Java Basics - Anfänger-Themen 7
C Frage zu Vector und muliplizieren des Inhaltes Java Basics - Anfänger-Themen 2
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
J Collection Vector Java Basics - Anfänger-Themen 8
Streeber ArrayList/Vector, mehrdimensional Java Basics - Anfänger-Themen 11
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
babel Einen Vector/Liste mit Daten prüfen Java Basics - Anfänger-Themen 31
B Hilfe zum einem Problem mit Vector Java Basics - Anfänger-Themen 8
H Vector - Fehler? Java Basics - Anfänger-Themen 2
babel einen Vector nach Datum sortieren Java Basics - Anfänger-Themen 21
T Array-Vector Problem Java Basics - Anfänger-Themen 18
P Vector und Exception Java Basics - Anfänger-Themen 7
K Vector Java Basics - Anfänger-Themen 3
K Vector Java Basics - Anfänger-Themen 10
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
T Object aus Vector übergeben Java Basics - Anfänger-Themen 2
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
L Vector einem Array hinzufügen Java Basics - Anfänger-Themen 14
P Vector mit double Java Basics - Anfänger-Themen 3
P Vector Elemente auslesen Java Basics - Anfänger-Themen 9
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
W Vector mit String[] auslesen Java Basics - Anfänger-Themen 4
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
B Dopplete aus Vector entfernen Java Basics - Anfänger-Themen 8
E Vector Fehler bei allen Methoden von Vector Java Basics - Anfänger-Themen 2
K Vector zu Array machen Java Basics - Anfänger-Themen 10
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
L Multidimensional Vector - Recordset Java Basics - Anfänger-Themen 5
K Objektklasse mit leerem Vector füllen Java Basics - Anfänger-Themen 6
K Vector wird überschrieben Java Basics - Anfänger-Themen 7
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
K vector cannot be resolved Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
M ObjectInputStream, Object und Vector<Object> Java Basics - Anfänger-Themen 4
G Vector, equal & Casts Java Basics - Anfänger-Themen 5
N Objekte in einen Vector packen oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Vector Java Basics - Anfänger-Themen 7
S Problem mit Vector Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G 2D vector zugriff auf elementinterne elemente wie Java Basics - Anfänger-Themen 3
G vector in neuem vector sortieren Java Basics - Anfänger-Themen 3
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
G vector füllt sich immer weiter. wo muss ich ihn leeren? Java Basics - Anfänger-Themen 3
V Vector/Arraylist hat nur gleiche Einträge Java Basics - Anfänger-Themen 3
G Vector eigenen Typs mit Daten füllen Java Basics - Anfänger-Themen 20
H Vector und Dateien Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben