PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : winkel zwischen 2 geraden



Flatlander
30-05-2006, 20:50
ich soll n prog schreiben was für ein gegebenes polygon überprüft ob es konvex ist...
dafür will ich immer überprüfen, ob der winkel zwischen 2 gerade unter 180 grad bleibt
es gibt leider keine solche funktion

habt ihr ne idee?

hier mein bisheriger code (sorry wenns n bissl caotisch is)

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.math.*;

public class Konpoly extends Frame{


Point2D []pkta = new Point2D [11];
int zähler;
double [] winkel = new double [11];



Konpoly(){
super("Aufgabe 3.3");
setBackground(Color.WHITE);
setSize(600,600);
setVisible(true);

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);
}
});

addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
Graphics2D g2 = (Graphics2D)getGraphics();

if(e.getButton()==3){
g2.drawLine((int)pkta[1].getX(),(int)pkta[1].getY(),
(int)pkta[zähler].getX(), (int)pkta[zähler].getY());
zähler=0;
//System.out.println(getAngle());
return;
}//if
else {
zähler++;
System.out.println("Sie haben bereits "+zähler+" Punkte gesetzt");
if(zähler < 11){
pkta[zähler]=(Point2D)e.getPoint();
g2.drawLine((int)pkta[zähler-1].getX(),(int)pkta[zähler-1].getY(),
(int)pkta[zähler].getX(), (int)pkta[zähler].getY());
if(zähler>2)//System.out.println(schnittWinkel(pkta[zähler],pkta[zähler-1],pkta[zähler-2]));
//System.out.println(berechneM());
}//if
else System.out.println("Zu viele Eckpunkte");
}//else

}//mouseclicked
}//mouselistener
);//mouseadapter
}//mouselistener



private void pruefeKonvex(){

}

/*public double getAngle() {
double distCentWristX = pkta[zähler].getX() - pkta[zähler-1].getX();
double distCentWristY = pkta[zähler].getY() - pkta[zähler-1].getY();
double getangle = Math.acos( distCentWristX /pkta[zähler].distance(pkta[zähler-1]));
double x = (getangle * 360 ) / (2*Math.PI);
return x;
}*/

private double berechneM(){
return( (pkta[zähler].getY()-pkta[zähler-1].getY())/(pkta[zähler].getX()-pkta[zähler-1].getX()));
}

private double berechneM(Point2D p1, Point2D p2){
return( (p2.getY()-p1.getY())/(p2.getX()-p1.getX()));
}

/*private double schnittWinkel(Point2D p1, Point2D p2, Point2D p3){
return Math.acos(((berechneM(p2,p1))-(berechneM(p3,p2)))/(1+(berechneM(p2,p3)*(berechneM(p2,p1)))));
}*/


public static void main(String[]args){
Konpoly f = new Konpoly();
//System.out.println(toDeg(Math.acos(1)));

}

}

quinte17
01-06-2006, 13:15
kannst du das ganze in code tags packen? ist um einiges lesbarer

was ist dein problem genau? weißt du nicht wie man das ausrechnet, oder weißt du nicht wie du dies in eine funktion packen sollst?

greetz

Waxolunist
19-06-2006, 09:48
Ich denke nicht, dass das hier ein Mathematikforum ist.

Christoph
19-06-2006, 13:20
ich soll n prog schreiben was für ein gegebenes polygon überprüft ob es konvex ist...
dafür will ich immer überprüfen, ob der winkel zwischen 2 gerade unter 180 grad bleibt
es gibt leider keine solche funktion


Schau Dir mal in Deinem Matehmatikbuch die Definition des Skalarprodukts an. Dann sollte klar sein, wie der Winkel berechnet wird.

Ob man damit aber Konvexität überprüft, bin ich mir im Moment nicht so sicher.

Caveman
19-06-2006, 13:49
@Waxolunist (http://www.mrunix.de/forums/member.php?u=13882):

Glaubst Du wirklich, dass Flatlander (http://www.mrunix.de/forums/member.php?u=13783) das noch liest?
Schau Dir mal das Datum an!

Außerdem sind hier einige Informatiker unterwegs, die ganz gut Mathematik beherrschen. Deshalb sollte eine mathematische Frage mal nebenbei kein Problem darstellen.

Waxolunist
19-06-2006, 14:50
@Caveman: Hab leider nicht auf das Datum gesehen.

Zum konvex-Problem: Ich hab noch nicht verstanden, wie er überprüfen möchte ob ein Polygon konvex ist, mittels der Überprüfung ob der Winkel zwischen 2 Geraden unter 180Grad ist. Ein Dreieck hat grundsätzlich nur Winkel unter 180Grad, dennoch ist es immer konvex.

Stell dir ein M mit einem Strich darunter vor. Ein nicht konvexes Polygon. Trotzdem ist jeder Winkel in diesem M unter 180Grad.

Ich hab mal kurz über das Problem nachgedacht, bin jedoch auf keine Lösung gekommen. Man müsste ein sehr engmaschiges Gitter darüberziehen und jeden Punkt mit jedem verbinden, sehen ob die dadurch entstehende Gerade einen Punkt berührt, der nicht vom Polygon eingeschlossen ist. Das ist bestimmt eine interessante Aufgabe. Vor allem erst im dreidimensionalen Raum, wo es dann sehr auf den Gittergenerator ankommt.

Ich denke dass ist mathematisch nicht lösbar, sondern nur durch try and error. Aber vielleicht bin ich jetzt schon total am Holzweg. Das könnte man hier gerne diskutieren. Gibt es dafür schon Lösungen? Ich wär gespannt.

Waxolunist
19-06-2006, 17:37
Ok mein Fehler. Der Winkel darf natürlich nicht größer als 180Grad innen liegend sein. Hatte eine falsche Sichtweise auf das Problem. Das kommt von der verdammten Simulationstechnik und Numerik. Da gibts dann nur mehr MC.