Tag,
ich versuche momentan ein Quadrat bzw. ein Dreieck um einen Mittelpunkt zu drehen.
Das ganze stellt das Haus vom Nikaus da, welches von der Klasse Zeichnen mit 5 Eckpunkten und 10 x/y-Koordinaten gezeichnet wird.
Der erste Startpunkt (unten links) ist in der Klasse vorgegeben, die restlichen werden berechnet.
Davon abgesehen, dass die Spitze des Hauses außerhalb des Fensters ist, was ich noch ändern muss, aber nicht genau weiß, wie, läuft alles.
Von Zeichnen aus will ich also zuerst in der Methode paint das Haus mit den originalen Koordinaten zeichnen und in drehen sollen die Koordinaten geändert werden.
Jetzt hab ich allerdings ein paar Denkblockaden, ich komme einfach nicht drauf, wie ich die neuen Koordinaten für die Punkte berechne.
Nimmt man an, man hat ein Quadrat, zeichnet einen Kreis drum, der die 4 Eckpunkte des Quadrats berührt, dann ist der Kreis ja praktisch die Linie, auf der sich die Koordinaten befinden.
Ich kann Radius, den Mittelpunkt, irgendwelche Längen alles berechnen, aber ich komme nicht drauf, wie ich bspw. den originalen Punkt xPunkte[0] = 125; neu berechne, sodass er in Richtung/oder gegen den Uhrzeigersinn (, mir ist das relativ egal) geschoben wird.
Ich hab an Sinus, Cosinus und Tangens, sowie an die Drehmatrix gedacht, aber kann das nicht umsetzen.
Hier mal meine Ansätze bis jetzt (es ging mir erstmal nur um die Punkte, dass sie richtig berechnet werden, dass noch nichts gezeichnet wird ist mir klar, darum hab ich die Punkte berechnen und ausgeben lassen.) :
Ich hoffe, ihr versteht das Problem und könnt mir helfen, ist bestimmt nicht allzu schwer, aber ich komme einfach nicht drauf. Die aktuelle Berechnung läuft glaub ich falsch, eigentlich müsste ich ja was mit PI oder so machen, aber ich weiß nicht, wie.
ich versuche momentan ein Quadrat bzw. ein Dreieck um einen Mittelpunkt zu drehen.
Das ganze stellt das Haus vom Nikaus da, welches von der Klasse Zeichnen mit 5 Eckpunkten und 10 x/y-Koordinaten gezeichnet wird.
Der erste Startpunkt (unten links) ist in der Klasse vorgegeben, die restlichen werden berechnet.
Davon abgesehen, dass die Spitze des Hauses außerhalb des Fensters ist, was ich noch ändern muss, aber nicht genau weiß, wie, läuft alles.
Von Zeichnen aus will ich also zuerst in der Methode paint das Haus mit den originalen Koordinaten zeichnen und in drehen sollen die Koordinaten geändert werden.
Jetzt hab ich allerdings ein paar Denkblockaden, ich komme einfach nicht drauf, wie ich die neuen Koordinaten für die Punkte berechne.
Nimmt man an, man hat ein Quadrat, zeichnet einen Kreis drum, der die 4 Eckpunkte des Quadrats berührt, dann ist der Kreis ja praktisch die Linie, auf der sich die Koordinaten befinden.
Ich kann Radius, den Mittelpunkt, irgendwelche Längen alles berechnen, aber ich komme nicht drauf, wie ich bspw. den originalen Punkt xPunkte[0] = 125; neu berechne, sodass er in Richtung/oder gegen den Uhrzeigersinn (, mir ist das relativ egal) geschoben wird.
Ich hab an Sinus, Cosinus und Tangens, sowie an die Drehmatrix gedacht, aber kann das nicht umsetzen.
Hier mal meine Ansätze bis jetzt (es ging mir erstmal nur um die Punkte, dass sie richtig berechnet werden, dass noch nichts gezeichnet wird ist mir klar, darum hab ich die Punkte berechnen und ausgeben lassen.) :
Java:
import java.awt.*;
import javax.swing.*;
import java.awt.Graphics;
import java.math.*;
/*
*draw.(this) v1.2
*22/05/2011, 11:30
*© by Jats
*
*Update: draw.(this) v1.3
*22/05/2011, 12:00
*
*/
public class Zeichnen extends JFrame
{
private Haus h;
double xPunkte [];
double yPunkte [];
public Zeichnen()
{
new Canvas();
setSize(750,500);
setLocation(400,100);
setDefaultCloseOperation(3);
setResizable(false);
setBackground(Color.WHITE);
setVisible(true);
repaint();
h = new Haus();
xPunkte = new double [5];
yPunkte = new double [5];
}
public void drehen() {
double dxPunkte [];
double dyPunkte [];
dxPunkte = new double [5];
dyPunkte = new double [5];
int a = h.geta();
double hyDreieck = yPunkte[2]-yPunkte[3];
double mxViereck = xPunkte[0]+a/2;
double myViereck = yPunkte[0]-a/2;
double rViereck = Math.sqrt((a/2)^2+(a/2)^2);
double rDreieck = (a/2)+hyDreieck;
double beta = Math.pow((a/2),2)+Math.pow(rViereck,2);
for(int i=0; i<=360; i++) {
for(int j=0; j<5; j++) {
dxPunkte [j] = (Math.cos(i) - Math.sin(i))*(xPunkte[j]);
System.out.println(dxPunkte[j]+"");
dyPunkte [j] = (Math.cos(i) - Math.sin(i))*(yPunkte[j]);
System.out.println(dyPunkte[j]+"");
}
}
}
public void paint(Graphics g) {
for(int i=0; i<5; i++) {
xPunkte [i] = ((double)h.getPx(i));
yPunkte [i] = ((double)h.getPy(i));
}
try {
g.drawString("© by Jats",125,400);
Thread.sleep(2000);
g.drawLine(((int)xPunkte[0]),((int)yPunkte[0]),((int)xPunkte[1]),((int)yPunkte[1]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[1]),((int)yPunkte[1]),((int)xPunkte[2]),((int)yPunkte[2]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[2]),((int)yPunkte[2]),((int)xPunkte[3]),((int)yPunkte[3]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[3]),((int)yPunkte[3]),((int)xPunkte[4]),((int)yPunkte[4]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[4]),((int)yPunkte[4]),((int)xPunkte[2]),((int)yPunkte[2]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[2]),((int)yPunkte[2]),((int)xPunkte[0]),((int)yPunkte[0]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[0]),((int)yPunkte[0]),((int)xPunkte[4]),((int)yPunkte[4]));
Thread.sleep(2000);
g.drawLine(((int)xPunkte[4]),((int)yPunkte[4]),((int)xPunkte[1]),((int)yPunkte[1]));
drehen();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
Ich hoffe, ihr versteht das Problem und könnt mir helfen, ist bestimmt nicht allzu schwer, aber ich komme einfach nicht drauf. Die aktuelle Berechnung läuft glaub ich falsch, eigentlich müsste ich ja was mit PI oder so machen, aber ich weiß nicht, wie.