日期:2014-05-20 浏览次数:20928 次
class Point {
    private double x;
    private double y;
    public Point() {
    }
    /**
     * @param x
     * @param y
     */
    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
    /**
     * @return the x
     */
    public double getX() {
        return x;
    }
    /**
     * @param x
     *            the x to set
     */
    public void setX(double x) {
        this.x = x;
    }
    /**
     * @return the y
     */
    public double getY() {
        return y;
    }
    /**
     * @param y
     *            the y to set
     */
    public void setY(double y) {
        this.y = y;
    }
    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Point [x=" + x + ", y=" + y + "]";
    }
}
public class Test {
    public static double getK(Point a, Point b) {
        if (b.getX() == a.getX()) {
            return 0;
        }
        return (b.getY() - a.getY()) / (b.getX() - a.getX());
    }
    public static Point getPoint(Point a, Point b, Point c, Point d) {
        Point result = new Point();
        double k1, k2;
        k1 = (b.getY() - a.getY()) / (b.getX() - a.getX());
        k2 = (d.getY() - c.getY()) / (d.getX() - c.getX());
        result.setX((k1 * a.getX() / k2 - c.getX()) * k2 / (k1 - k2));
        result.setY(k1 * (result.getX() - a.getX()));
        return result;
    }
    public static Point[] getPoint(Point a, Point b, double len) {
        Point[] result = new Point[] { new Point(), new Point() };
        double k = getK(b, a);
        double z = a.getY() - k * a.getX();
        if (k >= -1.0 && k <= 1.0) {
            result[0].setY(a.getY() + len / 2);
            result[0].setX((result[0].getY() - z) / k);
            result[1].setY(a.getY() - len / 2);
            result[1].setX((result[1].getY() - z) / k);
        } else {
            result[0].setX(a.getX() + len / 2);
            result[0].setY(result[0].getX() * k + z);
            result[1].setX(a.getX() - len / 2);
            result[1].setY(result[1].getX() * k + z);
        }
        return result;
    }
    public static void main(String[] args) {
        Point a = new Point(2, 2);
        Point b = new Point(5, 4);
        double len = 2.0;
        Point[] points = getPoint(a, b, len);
        for (Point p : points) {
            System.out.println(p);
        }
    }
}