面向对象思考:三角形应用
任务:(几何:Triangle2D类,第10章10.12题)定义Triangle2D类和MyPoint2D类(自己定义:2维点),要求如下:
A、三个MyPoint2D类数据域成员:p1、p2、p3;这个三个数据域都带有get和set方法。
B、一个无参构造方法,创建三个坐标为(0,0)、(1,1)、(2,5)的点组成的三角形。
C、一个带有指定点的三角形的构造方法。
D、一个返回三角形面积的方法getArea();
E、一个返回三角形周长的方法getPerimeter();
F、给定点p如果在当前三角形内返回true的方法contains(MyPoint p);
G、给定三角形t如果在当前三角形内返回true的方法contains(Triangle2D t);
H、给定三角形t如果与当前三角形有重叠部分返回true的方法overlaps(Triangle2D t);
最后编写主类测试以上所有方法。
注意:该题需要大家先相关了解几何知识。相关向量计算的只是可以参照:https://wenku.baidu.com/view/ae559264783e0912a2162a79.html
设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2所组成的平行四边形的带符号的面积,
即:P × Q = x1y2 - x2y1,其结果是一个标量。显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。
一般在不加说明的情况下,本文下述算法中所有的点都看作矢量,两点的加减法就是矢量相加减,而点的乘法则看作矢量叉积。
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:
若 P × Q > 0 , 则P在Q的顺时针方向。
若 P × Q < 0 , 则P在Q的逆时针方向。
若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。
提示:可以使用Java提供的Line2D类或者自己定义线段类:Line,在该类中完成方法:
1、判断当前线段与线段a相交的方法:intersectionLine(Line a);
2、判断点a在本线段上的方法:contains(MyPoint2D a);
3、完成向量叉积p2p1xq2p1=(p2.x-p1.x)(q2.y-p1.y)-(q2.x-p1.x)(p2.y-p1.y)的方法:Multiply(p2,q2,p1);
源代码:
package MyWork;
import java.awt.geom.Line2D;
public class Triangle {
public static void main(String[] args) {
// TODO Auto-generated method stub
Triangle2D t1=new Triangle2D(new MyPoint2D(0,0),new MyPoint2D(0,3),new MyPoint2D(3,4.5));
System.out.println("the perimeter of t1 is "+t1.getPerimeter(t1.getp1(), t1.getp2(), t1.getp3()));
System.out.println("the area of t1 is "+t1.getArea(t1.getp1(), t1.getp2(), t1.getp3()));
System.out.println("判断点是否包含在内: "+t1.contains(new MyPoint2D(3,3)));
System.out.println("判断三角形是否包含在内: "+t1.contains(new Triangle2D(new MyPoint2D(0,0),new MyPoint2D(0,3),new MyPoint2D(3,4))));
System.o