Hallo, ich stehe noch am Anfang meine Programmiertechniken. Ich beschäftige mich neben der Schule ein bisschen mit Java und habe ein Programm geschrieben was nicht tut, was es soll. Ziel ist es im Moment, dass die Konsole überprüft ob ein Punkt auf einer Geraden liegt, das Programm behandelt Geometrie. So wie ich die Punkte gesetzt habe sollte das eigentlich Funktionieren, doch das tut es nicht.
Hier die Klasse "Punkt", die ich nutze um Punkte zu verwalten.
Die Klasse "Gerade", die sich um Geraden kümmert.
Das Klasse Dreieck, die ich im Moment aber nicht nutze, da sie ohne Probleme läuft :
Das Hauptprogramm (sehr kurz):
Und schließlich die Konsolenausgabe:
Der Schnittpunkt stimmt nicht und DEFAULT stimmt auch nicht, da rein mathematisch gesehen, der Punkt auf der Gerade liegt.
Ich nutze NetBeans, gehe in die Stufe 11.
Vielen Dank für alle nützlichen Beiträge im Vorraus und ich hoffe, ich werde Spaß mit diesem Forum haben und ihr mit mir
Hier die Klasse "Punkt", die ich nutze um Punkte zu verwalten.
Code:
package dreieckanwendung;
public class Punkt {
private double zX;
private double zY;
//Konstruktor mit Parameter
public Punkt(double pX, double pY){
zX=pX;
zY=pY;
}
//Konstruktor ohne Parameter
public Punkt(){
zX=0;
zY=0;
}
// Getter-Methoden
public double getX(){
return zX;
}
public double getY(){
return zY;
}
// Setter-Methoden
public void setX(double pX){
zX=pX;
}
public void setY(double pY){
zY=pY;
}
// Andere Methoden distance, isSame, moved
public double distance(Punkt pPunkt)
{
double a,b;
if(zX>pPunkt.zX)
a=zX-pPunkt.zX;
else if (pPunkt.zX>zX)
a=pPunkt.zX-zX;
else
a=0;
if(zY>pPunkt.zY)
b=zY-pPunkt.zY;
else if(pPunkt.zY>zY)
b=pPunkt.zY-zY;
else
b=0;
return (Math.sqrt((a*a)+(b*b)));
}
public boolean isSame(Punkt pPunkt, double pWithin){
if ((distance(pPunkt))<=pWithin)
return true;
else
return false;
}
public Punkt moved(double pXVerschiebung, double pYVerschiebung){
Punkt pPunkt;
pPunkt=new Punkt();
pPunkt.zX=(zX+pXVerschiebung);
pPunkt.zY=(zY+pYVerschiebung);
return pPunkt;
}
}
Die Klasse "Gerade", die sich um Geraden kümmert.
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dreieckanwendung;
/**
*
* @author Leo
*/
public class Gerade {
private double Steigung; // Eine Gerade ist definiert durch die Steigung
private double yAbschnitt; // und den y-Achsen-Abschnitt.
public Gerade(){ // Standardkonstruktor
Steigung = 0;
yAbschnitt = 0;
}
// Getter und Setter Methoden
public Gerade(double pSteigung, double pyAbschnitt){ // Konstruktor mit Parametern
Steigung = pSteigung;
yAbschnitt = pyAbschnitt;
}
public double getSteigung(){
return Steigung;
}
public double getyAbschnitt(){
return yAbschnitt;
}
public void setViaPoints(Punkt P1, Punkt P2){
Steigung = ((P2.getY()-P1.getY())/(P2.getX()-P1.getX()));
yAbschnitt = (P1.getY()-(P1.getX()*(Steigung)));
}
public void setSteigung(double pSteigung){
Steigung = pSteigung;
}
public void setyAbschnitt(double pyAbschnitt){
yAbschnitt = pyAbschnitt;
}
public void printFunction(){
if(yAbschnitt > 0)
System.out.printf("f(x) = %.2fx+%.2f", Steigung, yAbschnitt);
else if(yAbschnitt == 0)
System.out.printf("f(x) = %.2fx", Steigung);
else
System.out.printf("f(x) = %.2f%.2f", Steigung, yAbschnitt);
}
public Punkt intersection(Gerade pG){ // Schnittpunkt
Punkt P1;
P1 = new Punkt();
P1.setX((yAbschnitt/(pG.Steigung-Steigung))-pG.yAbschnitt);
P1.setY(Steigung*P1.getX()+yAbschnitt);
return P1;
}
public boolean isPointOn(Punkt P1){ // Ist ein Punkt auf der Geraden?
Punkt P2;
P2 = new Punkt(0,yAbschnitt);
Gerade G1;
G1 = new Gerade();
G1.setViaPoints(P1,P2);
if((G1.Steigung == Steigung) && (G1.yAbschnitt == yAbschnitt))
return true;
else
return false;
}
public Gerade orthogTroughPoint(Punkt P1){ //Senkrechte durch einen Punkt
Gerade G1;
G1 = new Gerade();
G1.Steigung = (-1)*(1/Steigung);
G1.yAbschnitt = (P1.getY()-P1.getX()*(Steigung));
return G1;
}
}
Das Klasse Dreieck, die ich im Moment aber nicht nutze, da sie ohne Probleme läuft :
Code:
package dreieckanwendung;
public class Dreieck {
//Punkte
private Punkt hA = new Punkt(), hB= new Punkt(), hC= new Punkt();
//Seiten
private double za= hB.distance(hC);
private double zb= hA.distance(hC);
private double zc= hA.distance(hB);
// Konstruktor ohne Parameter
public Dreieck()
{
hA.setX(0);
hA.setY(0);
hB.setX(0);
hB.setY(0);
hC.setX(0);
hC.setY(0);
za= hB.distance(hC);
zb= hA.distance(hC);
zc= hA.distance(hB);
}
// Konstruktor mit Parameter
public Dreieck(double pAx, double pAy, double pBx, double pBy, double pCx, double pCy){
hA.setX(pAx);
hA.setY(pAy);
hB.setX(pBx);
hB.setY(pBy);
hC.setX(pCx);
hC.setY(pCy);
za= hB.distance(hC);
zb= hA.distance(hC);
zc= hA.distance(hB);
}
// Getter-Funktionen
public Punkt getA(){
return hA;
}
public Punkt getB(){
return hB;
}
public Punkt getC(){
return hC;
}
// Setter-Funktionen
public void setA(double pAx, double pAy){
hA.setX(pAx);
hA.setY(pAy);
}
public void setB(double pBx, double pBy){
hB.setX(pBx);
hB.setY(pBy);
}
public void setC(double pCx, double pCy){
hB.setX(pCx);
hB.setY(pCy);
}
/* Andere Methoden: umfang, flächeninhalt, lower left, upper Right
moved, zoomed ( vom Nullpunkt), zoomed mit beliebigem (mit beliebigem Streckzentrum)*/
public double umfang(){
return (za+zb+zc);
}
public double flaecheninhalt(){ //Formel von Heron
return ((1/4)*(Math.sqrt((za+zb+zc)*(za+zb-zc)*(zb+zc-za)*(zc+za-zb))));
}
public Punkt lowerLeft(){
Punkt lPunkt;
lPunkt = new Punkt();
if(hA.getX()<hB.getX())
if (hA.getX()<hC.getX())
lPunkt.setX(hA.getX());
else
lPunkt.setX(hC.getX());
else
if(hB.getX()<hC.getX())
lPunkt.setX(hB.getX());
else
lPunkt.setX(hC.getX());
if(hA.getY()<hB.getY())
if (hA.getY()<hC.getY())
lPunkt.setY(hA.getY());
else
lPunkt.setY(hC.getY());
else
if(hB.getY()<hC.getY())
lPunkt.setY(hB.getY());
else
lPunkt.setY(hC.getY());
return lPunkt;
}
public Punkt upperRight(){
Punkt lPunkt;
lPunkt = new Punkt();
if(hA.getX()>hB.getX())
if (hA.getX()>hC.getX())
lPunkt.setX(hA.getX());
else
lPunkt.setX(hC.getX());
else
if(hB.getX()>hC.getX())
lPunkt.setX(hB.getX());
else
lPunkt.setX(hC.getX());
if(hA.getY()>hB.getY())
if (hA.getY()>hC.getY())
lPunkt.setY(hA.getY());
else
lPunkt.setY(hC.getY());
else
if(hB.getY()>hC.getY())
lPunkt.setY(hB.getY());
else
lPunkt.setY(hC.getY());
return lPunkt;
}
public Dreieck moved(double pXVerschiebung, double pYVerschiebung){
Dreieck lDreieck;
lDreieck = new Dreieck(0,0,0,0,0,0);
lDreieck.hA.setX((hA.getX()+pXVerschiebung));
lDreieck.hA.setY((hA.getY()+pYVerschiebung));
lDreieck.hB.setX((hB.getX()+pXVerschiebung));
lDreieck.hB.setY((hB.getY()+pYVerschiebung));
lDreieck.hC.setX((hC.getX()+pXVerschiebung));
lDreieck.hC.setY((hC.getY()+pYVerschiebung));
return lDreieck;
}
public Dreieck zoomed(double pFaktor){
Dreieck lDreieck;
lDreieck = new Dreieck(0,0,0,0,0,0);
lDreieck.hA.setX(hA.getX()*pFaktor);
lDreieck.hA.setY(hA.getY()*pFaktor);
lDreieck.hB.setX(hB.getX()*pFaktor);
lDreieck.hB.setY(hB.getY()*pFaktor);
lDreieck.hC.setX(hC.getX()*pFaktor);
lDreieck.hC.setY(hC.getY()*pFaktor);
return lDreieck;
}
public Dreieck zoomed(Punkt pZentrum, double pFaktor){
Dreieck lDreieck;
lDreieck = new Dreieck(0,0,0,0,0,0);
lDreieck.hA.setX((pZentrum.getX()+(hA.getX()-pZentrum.getX())*pFaktor));
lDreieck.hA.setY((pZentrum.getY()+(hA.getY()-pZentrum.getY())*pFaktor));
lDreieck.hB.setX((pZentrum.getX()+(hB.getX()-pZentrum.getX())*pFaktor));
lDreieck.hB.setY((pZentrum.getY()+(hB.getY()-pZentrum.getY())*pFaktor));
lDreieck.hC.setX((pZentrum.getX()+(hC.getX()-pZentrum.getX())*pFaktor));
lDreieck.hC.setY((pZentrum.getY()+(hC.getY()-pZentrum.getY())*pFaktor));
return lDreieck;
}
}
Das Hauptprogramm (sehr kurz):
Code:
package dreieckanwendung;
public class Main {
public static void main(String[] args) {
Gerade G1, G2;
Punkt P1 = new Punkt(2,-5.36);
G1 = new Gerade(-1.5,-2.36);
if (G1.isPointOn(P1))
System.out.printf("YES%n");
else
System.out.printf("DEFAULT%n");
G2 = new Gerade(6.5,-1.24);
P1 = G1.intersection(G2);
System.out.printf("(%.2f|%.2f)%n", P1.getX(), P1.getY());
}
}
Und schließlich die Konsolenausgabe:
run:
DEFAULT
(0,95|-3,7
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Minuten 12 Sekunden)
Der Schnittpunkt stimmt nicht und DEFAULT stimmt auch nicht, da rein mathematisch gesehen, der Punkt auf der Gerade liegt.
Ich nutze NetBeans, gehe in die Stufe 11.
Vielen Dank für alle nützlichen Beiträge im Vorraus und ich hoffe, ich werde Spaß mit diesem Forum haben und ihr mit mir