0

我正在尝试创建简单的对象,从单点对象分支到线对象(两个点),然后到三角形对象(三个点)。我了解如何创建点类,但在尝试分支到线类时,我对如何使用初始点类实际编写线类或三角形类有点困惑。我需要一些帮助才能从单点课程进入

我可以发布一些到目前为止我已经完成的代码。

我还读到那里已经有 java 几何类,但我想实际创建这些类来练习 OOP。

编辑---在下面添加代码

class Point 
{
private double x;
private double y;

public Point() 
{
    x = 0.0;
    y = 0.0;
}

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

public double getX() 
{
    return this.x;
}

public double getY() 
{
    return this.y;
}

public void setX(double x) 
{
    this.x = x;
}

public void setY(double y) 
{
    this.y = y;
}

public double distance(Point p) 
{
    return Math.sqrt((this.x - p.x) * (this.x - p.x) + (this.y - p.y)
            * (this.y - p.y));
}

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

public boolean equals(Point p) 
{
    double delta = 1.0e-18;
    return (Math.abs(this.x - p.x) < delta)
            && (Math.abs(this.y - p.y) < delta);
}

//-----------------Line Class--------------------//
class Line 
{
private Point p1;
private Point p2;

public Line() 
{
    p1 = new Point (0,0);
    p2 = new Point (1,1);
}

public Line(double x1, double y1, double x2, double y2) 
{
    p1 = new Point (x1, y1);
    p2 = new Point (x2, y2);
}

public Line(Point p, Point q)
{
    p1 = new Point(p.getX(), p.getY());
    p2 = new Point(q.getX(), q.getY());
}

public Point getP1()
{
    return this.p1;
}

public Point getP2()
{
    return this.p2;
}

public void setP1(double x, double y)
{
    Point p1 = new Point(x, y);
    this.p1 = p1;
}

public void setP2(double x, double y)
{
    Point p2 = new Point(x, y);
    this.p2 = p2;   
}

public boolean isParallelY() 
{
    double delta = 1.0e-18;
    return (Math.abs(p1.getX() - p2.getX()) < delta);
}

public boolean isParallelX()
{
    double delta = 1.0e-18;
    return (Math.abs(p1.getY() - p2.getY()) < delta);
}

public boolean isParallel (Line line)
{
    if (this.Slope() == line.Slope())
        return true;
    else 
        return false;
}

public double Slope() 
{
    double inf = Double.POSITIVE_INFINITY;
    if(isParallelY())
        return inf;
    return ((p2.getY() - p1.getY()) / (p2.getX() - p1.getX()));
}

public double xIntercept()
{
    return -(p1.getY() / Slope() - p1.getX());
}

public double yIntercept()
{
    return p1.getY() - (Slope() * p1.getX());
}

我现在仍在向线类添加方法,还没有开始使用三角形类(尽管我正在考虑创建一个 3 点而不是 3 条线的三角形。对于分支混乱,我很抱歉,我比较新。

4

2 回答 2

2

ALine有 2 Points,所以任何Line类都会有 2Point-attributes

AnyTriangle有 3 Points,所以任何Triangle类都有 3Point-attributes

您可以创建这些类的构造函数以确保正确的对象。

public Line(Point point1, Point point2)
{
    this.point1 = point1;
    this.point2 = point2;
}

Triangle班级

public Triangle(Line line1, Line line2, Line line3)
{
    this.point1 = line1.firstpoint();
    this.point2 = line2.firstpoint();
    this.point3 = line3.firstpoint();
}

或者

public Triangle(Point point1, Point point2, Point point3)
{
    this.point1 = point1;
    this.point2 = point2;
    this.point3 = point3;
}

由于每个类都包含正确的属性,您可以使用它们进行计算。

于 2013-08-11T22:10:13.877 回答
0

如果您真的想做 OOP,请考虑一下您的域中存在哪些对象,以及它们理解哪些消息 - 这就是Kay 先生所谈论的全部内容:)

在您的情况下,您找到了Points. 似乎您正在考虑 2D 点,这就是您刚刚使用xy坐标的原因。在 2D 世界中,我们想问Point什么?它是位置/坐标,对 - 我们已经有了它们。还有什么?距离另一个Point,对。到目前为止,这似乎是几乎所有Point可以做的事情。

等等——我们可以要求它加入另一个Point,创建一个Line. 所以,也许,做事aPoint.lineTo(anotherPoint)并没有那么糟糕。但是,嘿,重要的是我们实际上是在创建Lines。

它们由一对点组成。我们想问 aLine什么?当然,它很长。它显然与其点之间的距离相同。我们可以问它到 a 的距离Point(一些数学家已经定义了它,是的)。我们可以询问一条线是否与另一条线平行,或者它们是否交叉。我们可以问它在哪一点交叉。我们可以问两条线形成的角度。然后,再一次,我们可以要求它加入第三个点,创建一个Triangle.

然后我们会有一个凸的形状,所以新的有趣的东西,如面积、周长、内角、外角。

尝试思考事物、概念和定义,并尽可能简单地实施它们。尝试使代码尽可能接近它所代表的概念的通俗定义。并在以前的抽象的基础上构建新的抽象。

除此之外,还有一件事你不能忘记:编程就是建模。模型是抽象的。OOP 是关于使用对象来建模我们感兴趣的现实部分。如果您没有定义要建模的事物的范围(因为这种情况只是一个教育活动,没有实际要求),您可以度过你的空洞生活,为你的对象添加方法,没有太多意义。提前想好你想用你的点、线、三角形等做些什么,并将自己限制在它们上面。

快乐的黑客:)

于 2013-08-12T05:29:46.317 回答