# Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht)



## Brexoi (27. Apr 2015)

Hallo liebe Community,
ich bin neu in der Welt von Java und sitze gerade an meiner ersten Aufgabe dran.
Ich benutze das Programm/Compiler Netbeans.

ich bin gerade an einer aufgabe dran in der ich ein Kreuzprodukt zweier  Vektoren miteinander berechnen muss, hab aber momentan irgendwie eine Blockade  und komme nicht wirklich weiter.
Hier mal ein ausschnitt vom Quellcode der *Hauptklasse*:

[SIZE=+1]
	
	
	
	





```
public static void main(String[] args) {
    Vektor stromleiter = new Vektor();
    stromleiter.hersteller = "Stromleiter";
    stromleiter.vektor = 2;
    stromleiter.vektora1 = 1.5;
    stromleiter.vektora2 = 1;
    
    Vektor flussdichte = new Vektor();
    flussdichte.hersteller = "Flussdichte";
    flussdichte.vektor = 1;
    flussdichte.vektora1 = 2;
    flussdichte.vektora2 = 0.5;
    
    stromleiter.zeigeInfo();
    flussdichte.zeigeInfo();
    }
    
}
```
[/SIZE]

und hier ist die Klasse für die ganzen "Datentypen":

[SIZE=+1]
	
	
	
	





```
public class Vektor {
  
  int skalar;
  double vektor, vektora1, vektora2; 
  String hersteller;
  
  public void zeigeInfo(){
   System.out.println("Name = " + hersteller + "\nVektorA1 = " +this.vektor + 
         "\nVektorA2 = " +this.vektora1 +"\nVektorA3 = " +this.vektora2 + "\n");
    }
   
  //Konstruktor
  
    }
```
[/SIZE]

Als ergebnis bekomme ich momentan folgendes ausgegeben:

Name = Stromleiter
Vektor1 = 2.0
Vektor2 = 1.5
Vektor3 = 1.0

Name = Flussdichte
Vektor1 = 1.0
Vektor2 = 2.0
Vektor3 = 0.5

Ist auch soweit inordnung für mich, nun will ich gerne aber irgendwie  die oberen Vektoren mit den unteren Vektoren berechnen, sprich:
Vektor2 (oben) x Vektor3 (unten)
Vektor2 (unten) x Vektor 3(oben)
Vektor1 (oben) x Vektor3 (unten)
Vektor1 (unten) x Vektor3 (oben)
usw.

Ist das irgendwie möglich? Oder muss ich den Quellcode irgendwie  umschreiben um zwei ausgaben über 2 verschiedene Println zu haben.


----------



## Tarrew (27. Apr 2015)

Du könntest eine Methode schreiben, die als Parameter 2 Vektoren erwartet. 
In der Methode kannst du dann das Kreuzprodukt berechnen und ausgeben.
Also zB:

```
public static Vektor kreuzprodukt(Vektor a, Vektor b){
	  Vektor result = new Vektor();
	  
	  result.vektor=(a.vektora1*b.vektora2)-(a.vektora2*b.vektora1);
	//hier kannste das Kreuzprodukt weiter berechnen und ausgeben.
	  
	  return result;
  }
```

Alternativ eine nicht-statische Methode in deiner Klasse Vektor, die dann als Eingabe nur einen Vektor erwartet. 

In deiner Hauptklasse kannste dann einfach die Methode "kreuzprodukt" aufrufen und deine beiden Vektoren übergeben. Das Ergebnis in dem neuen Vektor speichern und ggfs. auf der Konsole ausgeben. 

Hoffe das ist es was du machen willst, der letzte Satz ist etwas verwirrend.


----------



## Brexoi (27. Apr 2015)

Tarrew hat gesagt.:


> Du könntest eine Methode schreiben, die als Parameter 2 Vektoren erwartet.
> In der Methode kannst du dann das Kreuzprodukt berechnen und ausgeben.
> Also zB:
> 
> ...



Danke dir für die schnelle hilfestellung, hört sich jedenfalls klasse an, nun ist die frage wie kann ich das denn von der Mainklasse abrufen? 
ich dachte sowas ruft man immer mit "zeigeInfo" oder "zeigeDaten" ab, geht aber nicht wirklich,..

Hab schon gefunden durch:

```
Vektor neuerVektor = Vektor.kreuzprodukt(stromleiter, flussdichte);
```


----------



## Brexoi (28. Apr 2015)

Ich hätte da mal eine frage, ich hab folgendes, ich hab eine Hauptklasse in der die Ausgaben und so steht und eine Klasse Vektor in der die ganzen "Datentypen" drine stehen. Das Programm berechnet das Kreuzprodukt zweier Vektoren miteinander und das ergebnis (der neue Vektor) wird mit einem "Skalar" multipliziert. 
Ist es irgendwie möglich, das, dass Programm nun noch 2-3 weitere Variationen ausspuckt wie beim ersten durchlauf nur mit anderen zahlen? Oder müsste ich den ganzen code noch 2-3x neu einfügen (copy & paste) um das zubekommen?

Momentaner Stand und Code sieht soweit so aus:
*Hauptklasse*

```
package lorentzkraft;


public class Lorentzkraft {

    public static void main(String[] args)
    {
        Vektor stromleiter = new Vektor(2, 0, 0, "Stromleiter");
        Vektor flussdichte = new Vektor(0, 0.5, 0, "Flussdichte");

        
        System.out.println(stromleiter);
        System.out.println(flussdichte);

        Vektor kreuzprodukt = stromleiter.kreuzprodukt(flussdichte);
        System.out.println(kreuzprodukt);

        System.out.println(berechneLorentzkraft(3, stromleiter, flussdichte));
    }

    private static Vektor berechneLorentzkraft(int i, Vektor l, Vektor b)
    {
        return l.kreuzprodukt(b).multiplizieren(i);
    }
}
```

*Klasse Vektor*

```
package lorentzkraft;


public class Vektor {


    private double x, y, z;

    private String bezeichnung;

    public Vektor(double x, double y, double z, String bezeichnung)
    {
        this.x = x;
        this.y = y;
        this.z = z;
        this.bezeichnung = bezeichnung;
    }

    @Override
    public String toString()
    {
        return "Vektor [" + bezeichnung + "]" +
             "\nx = " + this.x +
             "\ny = " + this.y +
             "\nz = " + this.z + "\n";
    }


    public Vektor kreuzprodukt(Vektor v)
    {
        return new Vektor((this.y * v.z) - (v.y * this.z), (this.x * v.z) - 
                (v.x * this.z), (this.x * v.y) - (v.x * this.y),
                          "Kreuzprodukt von " + this.bezeichnung + 
                                  " und " + v.bezeichnung);
    }

public Vektor multiplizieren(int i)
    {
        return new Vektor(x*i, y*i, z*i, bezeichnung + 
                " multipliziert mit "+i + " (Skalar/Stromstärke)");
    }

}
```


----------



## Saheeda (28. Apr 2015)

Hi,

mir würden jetzt spontan zwei Varianten einfallen.

Nr. 1 - Annahme: Du möchtest ein gleichmäßiges Intervall abdecken:


```
for(int i = 0; i< 10; i++){
	Vektor stromleiter = new Vektor(i, 0, 0, "Stromleiter");
	Vektor flussdichte = new Vektor(i, 0, 0, "Flussdichte");

	berechneLorentzkraft(3, stromleiter, flussdichte);
}
```

Du kannst hier auch i mit jedem beliebigen Faktor multiplizieren oder eine der anderen Koordinaten verändern, wie du halt möchtest.


Nr. 2 - Annahme: Die Werte sind gestreut:

In dem Fall würde ich mir ein Array aus Stromleiter-Vektoren und eines aus Flussdichte-Vektoren basteln und entweder jeden Eintrag mit jedem anderen berechnen oder immer die beiden Einträge an derselben Position.


```
//gleiche Elemente
for (int i = 0; i < stromleiterVektoren.length; i++) {
		berechneLorentzkraft(3, stromleiterVektoren[i], flussdichteVektoren[i]);
}

//jedes mit jedem
for (int i = 0; i < stromleiterVektoren.length; i++) {
	for (int j = 0; j < flussdichteVektoren.length; j++) {
		berechneLorentzkraft(3, stromleiterVektoren[i], flussdichteVektoren[j]);
	}
}
```


----------

