90 Grad Winkel errechnen

[funcoder]

Lt. Junior Grade
Registriert
Okt. 2008
Beiträge
404
Hallo ComputerBase`ler,

irgendwie hänge ich an einem für euch wahrscheinlich simplen Problem.

Für ein 2D Spiel müsste ich die Koordinaten eines 90 Grad Winkels errechnen. Gegeben sind mir jeweils 2 Koordinaten einer Gerade.

Im Anhang ist eine Bilddatei die das Problem deutlich besser beschreibt.

Ich weiß zwar das ich hier wohl Cosinus Sinus anwenden muss, aber ich habe ehrlich gesagt keine Ahnung wie ich das machen muss.


Danke ...

MfG

[funcoder]
 

Anhänge

  • bild.jpg
    bild.jpg
    9,7 KB · Aufrufe: 301
Erst einmal die Länge berechnen (Pythagoras). Dann machste Länge * tan 90° = Länge gesucht.
Nun haste Punkt und Länge, damit sollte sich was machen lassen, aber gerade komme ich nicht darauf.
 
Ist ja net schwer. Verschieb deinen Fixpunkt in den Ursprung, dann drehst du mit einer Drehmatrix um den Winkel phi und machst eine Matrixmultiplikation mit den Vektorkoordinaten zu deinem Punkt. -> danach Punkt zurückschieben

Mit dieser Matrix:

60953004f33e298667ab22dac7e7f653.png

Quelle: http://de.wikipedia.org/wiki/Drehmatrix

Somit:
x_1' = cos(phi) * x_1 - sin(phi) * x_2
x_2' = sin(phi) * x_1 + cos(phi) * x_2

Und schon hast du deinen neuen Vektor. In einer Hochsprache wie Java oder C++ ist eine solche Berechnung einfach umzusetzen.
 
hmm. nice nice
Da bin ich auf die schnelle nicht draufgekommen. Ist wohl einfach zu spät...
Ergänzung ()

Sodele,
habe nochmal darüber siniert und habe noch eine kleine Anmerkung zu Firestorm-'s Ausführung
Man muss den Punkt 2 als Ursprung zum drehen nehmen, denn man weiss ja nicht wo im raum das Gebilde liegt und es soll ja um Punkt 2 gedreht werden.

MfG MM
 
Wenn es immer 90° sein werden, drehe doch einfach die jeweilige Komponente um bzw. *-1 (bei deiner Skizze zum Beispiel .Y).

EDIT: Sorry, hab´ gerade an Pong gedacht.
 
Super, vielen Dank...

ich habe jetzt testweise das Programm in VB geschrieben...

Allerdings verstehe ich eins noch nicht. Durch was genau muss ich die Variable "phi" ersetzen. Ist die Zahl dynamisch errechenbar oder ist es eine feste Zahl?

Meine bisherige Umsetzung sieht so aus...

Code:
x1 = 450
y1 = 800

x2 = 1900
y2 = 1500

x3 = Cos(1) * x1 - Sin(1) * x2
x3 = Sin(1) * x1 + Cos(1) * x2

Picture1.Line (x1, y1)-(x2, y2)
Picture1.Line (x1, y1)-(x3, y3)

Hier habe ich testweise phi mal durch 1 ersetzt...
 
Danke, aber irgendwas ist wohl immer noch falsch an meinem Code:

PHP:
x1 = 1000
y1 = 1000
x2 = 3000
y2 = 3000

x3 = Cos(90) * x1 - Sin(90) * x2
y3 = Sin(90) * x1 * Cos(90) * y2

Picture1.Line (x1, y1)-(x2, y2)
Picture1.Line (x2, y2)-(x3, y3)

Den daraus resultierenden Winkel ist einfach immer unterschiedlich:(

Danke
 
öhm... den zweiten Punkt vom ersten Punkt abziehen (um ihn damit zum Mittelpunkt zu machen)
 
[funcoder] schrieb:
x3 = cos(90) * x1 - sin(90) * x2
y3 = sin(90) * x1 * cos(90) * y2

+ !!

Und deine Klammersetzung versteh ich auch net ganz...

Vielleicht mal den ganzen Code..
 
Zuletzt bearbeitet:
Okay. hier mal meiner ganzer Code möglichst gut kommentiert:

PHP:
x1 = 1000 ' Wert für X Achse Anfangspunkt
y1 = 1000 ' Wert für Y Achse Anfangspunkt
x2 = 4000 ' Wert für X Achse Endpunkt
y2 = 2000 ' Wert für Y Achse Endpunkt

x3 = (Cos(90) * x1 - Sin(90)) * x2  'Berechnung der neuen X Achse
y3 = (Sin(90) * y1 + Cos(90)) * y2  'Berechnung der neuen Y Achse

Picture1.Line (x1, y1)-(x2, y2) 'Zeichnen der Linie: verbinden der Punkte (x1,y1) nach (x2,y2)
Picture1.Line (x2, y2)-(x3, y3) ' Zeichnen der Linie: verbinden der Punkte (x2,y2) nach (x3,y3)

Das Ergebnis was dabei rauskommt habe ich im Anhang beigefügt...


@MasterMito

meinst du das etwa so:

x3 = (Cos(90) * x1 - Sin(90)) * (x2 -x1)
y3 = (Sin(90) * y1 + Cos(90)) * (y2-y1)

... wahrscheinlich nicht, denn funktionieren tut es nicht.:(

Vielen Dank
 

Anhänge

  • ergebnis.jpg
    ergebnis.jpg
    11,8 KB · Aufrufe: 169
Ist ja auch klar warums net geht.. Du hast gar nicht gelesen was ich geschrieben habe...!

Also pass auf, ich hab mich mal dazu durchgerungen und dir 5 Minuten meiner Zeit geschenkt und hab mal ein kleines Progrämmchen für dich verfasst, anhand dessen du es einfach kapieren musst.

So läufts auch. Ist allerdings Java. Aber ich denke jetzt hast du wenigstens eine Vorlage... Du musst nur die Formel richtig lesen!


Code:
package JFrame;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

/**********************************************************
 * @author AB
 * @date 22.01.2010 , @time 17:50:06
 * @version 1.0
 * 
 *          Diese Klasse erstellt ein neues JFrame und dreht die darauf gezeichnete Linie um einen Drehwinkel phi.
 ********************************************************** 
 */
public class Linie_Drehung extends JFrame {

	private int breite = 400;
	private int hoehe = 400;
	private int x1 = 100;
	private int y1 = 100;
	private int x2 = 0;
	private int y2 = 0;
	private float phi = 90;

	public Linie_Drehung() {
		setTitle("Linie_Drehung_Test");
		setSize(breite, hoehe);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}

	public void paint(Graphics g) {
		g.fillRect(0, 0, 400, 400);
		g.setColor(Color.RED);
		g.drawLine(200, 200, x1 + 200, 200 - y1);
		g.setColor(Color.GREEN);

		// !!!!!
		x2 = ((int) (x1 * Math.cos(phi * Math.PI / 180)))
				- ((int) (y1 * Math.sin(phi * Math.PI / 180)));
		y2 = ((int) (x1 * Math.sin(phi * Math.PI / 180)))
				+ ((int) (y1 * Math.cos(phi * Math.PI / 180)));
		g.drawLine(200, 200, x2 + 200, 200 - y2);

	}

	public static void main(String[] args) {
		new Linie_Drehung();
	}

}
 
Zuletzt bearbeitet:
Ahh, super vielen DANK Firestorm- für deinen Code und deine Mühe...

Die ganze Sache läuft jetzt und ich habs auch endlich kapiert. :D

Mathematik ist einfach nicht meine Stärke;)
 
Zurück
Oben