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