Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用OOP将点类分支为直线和三角形(Java)_Java_Oop - Fatal编程技术网

如何使用OOP将点类分支为直线和三角形(Java)

如何使用OOP将点类分支为直线和三角形(Java),java,oop,Java,Oop,我试图创建简单的对象,从一个单点对象分支到一个直线对象(两点),然后再分支到一个三角形对象(三点)。我了解如何创建point类,但是当我尝试分支到line类时,我有点困惑于如何使用初始point类编写line类或triangle类。我需要一些帮助,从一个单点类进入 我可以发布一些到目前为止我已经完成的代码 我还读到已经有java几何类了,但我想实际创建这些类来练习OOP 编辑---在下面添加代码 class Point { private double x; private double y;

我试图创建简单的对象,从一个单点对象分支到一个直线对象(两点),然后再分支到一个三角形对象(三点)。我了解如何创建point类,但是当我尝试分支到line类时,我有点困惑于如何使用初始point类编写line类或triangle类。我需要一些帮助,从一个单点类进入

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

我还读到已经有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());
}
类点
{
私人双x;
私人双y;
公共点()
{
x=0.0;
y=0.0;
}
公共点(双x,双y)
{
这个.x=x;
这个。y=y;
}
公共双getX()
{
归还这个.x;
}
公共双盖
{
把这个还给我;
}
公共无效集x(双x)
{
这个.x=x;
}
公共空间设置(双y)
{
这个。y=y;
}
公共双倍距离(p点)
{
返回Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)
*(此,y-p.y);;
}
公共字符串toString()
{
字符串s=“(“+x+”,“+y+”);
返回s;
}
公共布尔等于(点p)
{
双三角=1.0e-18;
返回(Math.abs(this.x-p.x)

我现在还在向line类添加方法,还没有开始使用triangle类(虽然我想用3个点而不是3条线来创建一个三角形。很抱歉分支混乱,我还是比较新的。

一条
线
有2个
,所以任何
线
类都会有2个
点属性

任何
三角形
都有3个
,因此任何
三角形
类都将有3个
点属性

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

public Line(Point point1, Point point2)
{
    this.point1 = point1;
    this.point2 = point2;
}
对于
三角形

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


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

如果您真的想进行OOP,请思考您的域中存在哪些对象,以及它们理解哪些消息—这就是所有讨论过的:)

在你的例子中,你找到了点。你似乎是在二维点上思考,这就是为什么你刚刚使用了x和y坐标。在二维世界中,我们想问点什么?这是位置/坐标,对吗?我们已经有了。还有什么?到另一个点的距离,对吗.到目前为止,
几乎可以做到这一点

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

它们由一对点组成。我们想问一条<代码>线<代码>?它的长度,当然。它显然与点之间的距离相同。我们可以问它到<代码>点的距离(一些数学家,是的)。我们可以问一条线是否与另一条线平行,或者它们是否交叉。我们可以问它在哪个点交叉。我们可以问两条线形成的角度。然后,我们可以再次要求它与第三个点连接,以创建一个
三角形

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

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

除此之外,还有一件事你不能忘记:编程是建模。模型是抽象。OOP是关于使用对象对我们感兴趣的现实部分进行建模。如果你不定义你希望建模的内容的范围(因为本例只是一个教育活动,没有实际需求),你可以花一生的时间为你的对象添加方法,而没有太多的意义。提前考虑你想用你的点、线、三角形等做什么,并限制自己使用它们


Happy hacking:)

我们能看看你到目前为止有什么,这样你的问题就不会被删除吗?一行是一个新的类,它描述了一行。一个li
public Triangle(Point point1, Point point2, Point point3)
{
    this.point1 = point1;
    this.point2 = point2;
    this.point3 = point3;
}