Einheitsvektor

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Java:
 /* Methode zum subtrahieren zweier Punkte*/
    public Vertex sub(Vertex that){
        return new Vertex(this.getX()-that.getX(),this.getY()-that.getY());
    }
    /*Methode die den Abstand zweier Punkte berechnet*/
    public double distance(Vertex that){
        Vertex c = this.sub(that);
        System.out.println(c);
        return Math.sqrt(c.x*c.x + c.y*c.y);
    }
    /* Normalisierter Vektor , wenn sein Betrag 1 ist.*/
    public Vertex normalize(){
        return new Vertex(this.getX()/distance(this),
                          this.getY()/distance(this));
    }

Kann mir einer helfen ?

Ich bekomme eine Komische ausgabe:

Java:
(0.0 0.0)
(0.0 0.0)
(Infinity Infinity)

Bin euch sehr dankbar, wenn mir jemand sagt was ich falsch mache .
Distanz geht super und der einheitsvektor wird doch x / distanz berechnet .
und y / distanze ...beide werte ergeben wieder korrdinaten und davon die länge ist betrag 1.

Java:
public Vertex normalize(){
        double a = distance(this);
        System.out.println(a);
        double b = this.x / a;
        System.out.println(b);
        double c = this.y / a;
        System.out.println(c);
        return new Vertex(this.x/this.distance(this),this.y/this.distance(this));


    }

Hier will das schhon nicht , danke für eure hilfe.


Aufruf mit:

Java:
Vertex v1 = new Vertex(17,4);
 Vertex v2 = new Vertex(42,23);
 Vertex v3 = new Vertex(0,0);
 Vertex v4 = new Vertex(42,23);
 Vertex v5 = new Vertex(-4,1);
 Vertex v6 = new Vertex(2,4);

 System.out.println(v1.add(v2));
  System.out.println(v1);
  System.out.println("####");
  System.out.println(v1);
  v1.addMod(v2);
  System.out.println(v2);
  System.out.println("****");
  
  System.out.println(v1.normalize());
 
  System.out.println("####");
 
S

SlaterB

Gast
du verwendest überall
this.distance(this)

in der distance()-Methode wird von this also this abgezogen, übrig bleib (0 0), davon die Länge ist 0,
das kann wohl kein Bestandteil irgendeiner sinnvollen Berechnung sein


immer schön vollständige Programme posten, dann kann es auch jeder testen
Java:
public class Test {
	public static void main(String[] args) {
		Vertex v1 = new Vertex(17, 4);

		System.out.println(v1.normalize());

	}
}

class Vertex {

	private double x;
	private double y;

	public Vertex(double x, double y) {
		this.x = x;
		this.y = y;
	}

	public double getX() {
		return x;
	}

	public double getY() {
		return y;
	}

	public String toString() {
		return "(" + x + " " + y + ")";
	}

	public Vertex sub(Vertex that) {
		return new Vertex(this.getX() - that.getX(), this.getY() - that.getY());
	}

	/* Methode die den Abstand zweier Punkte berechnet */
	public double distance(Vertex that) {
		Vertex c = this.sub(that);
		System.out.println(c);
		return Math.sqrt(c.x * c.x + c.y * c.y);
	}

	/* Normalisierter Vektor , wenn sein Betrag 1 ist. */
	public Vertex normalize() {
		double a = distance(this);
        System.out.println(a);
        double b = this.x / a;
        System.out.println(b);
        double c = this.y / a;
        System.out.println(c);
        return new Vertex(this.x/this.distance(this),this.y/this.distance(this));

	}
}
 

Spin

Top Contributor
Ok mache ich demnöchst besser :)

Java:
  public Vertex normalize(){
        return new Vertex(this.x/Math.sqrt(x*x +y*y),this.y/Math.sqrt(x*x +y*y));
 }

Habe es jetzt so realisiert und funktioniert gut. :)
Und habe meinen Fehler verstanden ....danke für den Hinweis .
Schönen abend noch SlaterB
 
S

SlaterB

Gast
naja, dann doch eher

public Vertex normalize(){
double d = berechneDistanceKorrekt();
return new Vertex(this.x/d,this.y/d);
}

selbst wenn du keine Methode mehr für distance haben willst (ein drastischer Schritt),
dann zumindest Math.sqrt(x*x +y*y) nur einmal ausrechnen und in d zwischenspeichern
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben