Basisklassen

Klassen Point und Line

 aufwärts

Punkt

Die Klasse Point stellt einen Punkt oder einen Vektor in der Ebene dar, repräsentiert durch x- und y-Koordinate.

 

public class Point
{
    // Ungenauigkeit der Koordinatendarstellung
    private static final double delta=1e-10;

    public double x, y;

    public Point(double x, double y)
    {
        this.x=x;
        this.y=y;
    }

    // Copy-Konstruktor
    public Point(Point p)
    {
        this(p.x, p.y);
    }

    // ---- Operationen ----

    // Addition eines Punktes
    public Point add(Point p)
    {
        return new Point(x+p.x, y+p.y);
    }

    // Negation eines Punktes
    public Point neg()
    {
        return new Point(-x, -y);
    }

    // Subtraktion eines Punktes
    public Point sub(Point p)
    {
        return add(p.neg());
    }

    // Multiplikation eines Punktes mit einer Zahl
    public Point mul(double k)
    {
        return new Point(k*x, k*y);
    }

    // Verschieben eines Punktes
    public void offset(double x0, double y0)
    {
        x+=x0;
        y+=y0;
    }

    // Skalarprodukt
    public double dot(Point p)
    {
        return x*p.x+y*p.y;
    }

    // Kreuzprodukt
    public double cross(Point p)
    {
        return x*p.y-y*p.x;
    }

    // ---- Normen und Abstände ----

    // Betragsnorm
    public double norm1()
    {
        return Math.abs(x)+Math.abs(y);
    }

    // euklidische Norm
    public double norm2()
    {
        return Math.sqrt(x*x+y*y);
    }

    // Maximumnorm
    public double norm8()
    {
        return Math.max(Math.abs(x), Math.abs(y));
    }

    // Manhattan-Abstand
    public double mdist(Point p)
    {
        return sub(p).norm1();
    }

    // euklidischer Abstand
    public double dist(Point p)
    {
        return sub(p).norm2();
    }

    // Kantenlänge quadratischer Bounding-Box
    public double bdist(Point p)
    {
        return sub(p).norm8();
    }

    public Point normalize()
    {
        return mul(1/norm2());
    }

    // ---- Hilfsfunktionen für konvexe Hülle ----

    public boolean isLower(Point p)
    {
        return y<p.y || y==p.y && x<p.x;
    }

    public boolean isFurther(Point p)
    {
        return norm1()>p.norm1();
    }

    public boolean isBetween(Point p0, Point p1)
    {
        return p0.mdist(p1)>=mdist(p0)+mdist(p1);
    }

    public boolean isLess(Point p)
    {
        double f=cross(p);
        return f>0 || f==0 && isFurther(p);
    }

    public double area2(Point p0, Point p1)
    {
        return sub(p0).cross(sub(p1));
    }

    public boolean isRightOf(Line g)
    {
        return area2(g.p0, g.p1)<0;
    }

    public boolean isConvex(Point p0, Point p1)
    {
        double f=area2(p0, p1);
        return f<0 || f==0 && !isBetween(p0, p1);
    }

    // ---- allgemeine Methoden ----

    private boolean isEqual(double a, double b)
    {
        return Math.abs(a-b)<delta;
    }

    public boolean equals(Point p)
    {
        return isEqual(x, p.x) && isEqual(y, p.y);
    }

    public String toString()
    {
        return x+" "+y;
    }

    public void draw(java.awt.Graphics gr)
    {
        java.awt.Point d=round();
        gr.fillRect(d.x, d.y, 3, 3);
    }

    public java.awt.Point round()
    {
        return new java.awt.Point((int)Math.round(x), (int)Math.round(y));
    }
    

}    // end class Point

Gerade

Die Klasse Line stellt einen Gerade in der Ebene dar. Die Gerade wird durch zwei Punkte repräsentiert.

 

public class Line
{
    public Point p0, p1;

    public Line(Point p0_, Point p1_)
    {
        p0=p0_;
        p1=p1_;
    }

    // liefert den normierten Richtungsvektor der Geraden
    // in Richtung von p0 nach p1
    public Point getVector()
    {
        return p1.sub(p0).normalize();
    }

    // liefert den Abstand des Punktes p zur Geraden
    public double distanceOf(Point p)
    {
        return Math.abs(p.sub(p0).cross(getVector()));
    }

    public String toString()
    {
        return p0+" "+p1;
    }

    public void draw(java.awt.Graphics gr)
    {
        java.awt.Point q0, q1;        
        q0=p0.round();        
        q1=p1.round();        
        gr.drawLine(q0.x, q0.y, q1.x, q1.y);
    }


}    // end class Line

 

up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   Datenschutz   ©   Created: 21.01.2009   Updated: 17.06.2018
Valid HTML 4.01 Transitional

Hochschule Flensburg
Campus Flensburg

Informatik in Flensburg studieren...

 

Neu gestaltetes Studienangebot:

Bachelor-Studiengang
Angewandte Informatik

mit Schwerpunkten auf den Themen Software, Web, Mobile, Security und Usability.

Ihr Abschluss
nach 7 Semestern:
Bachelor of Science

 

Ebenfalls ganz neu:

Master-Studiengang
Angewandte Informatik

Ein projektorientiertes Studium auf höchstem Niveau mit den Schwerpunkten Internet-Sicherheit, Mobile Computing und Human-Computer Interaction.

Ihr Abschluss
nach 3 Semestern:
Master of Science

 

Weitere Informatik-Studienangebote an der Hochschule Flensburg:

Medieninformatik

Wirtschaftsinformatik