面向对象思考:三角形应用

这篇博客介绍了如何用Java实现Triangle2D和MyPoint2D类,包括定义数据域成员、构造方法、计算面积、周长、判断点和三角形包含关系以及重叠部分的方法。内容涉及向量叉积和几何知识,以及利用Line2D类或自定义线段类进行线段相交和点在线段上的判断。
摘要由CSDN通过智能技术生成

面向对象思考:三角形应用

任务:(几何: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林笙10

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值