public class Sanjiao{
public static void main(String[]args){
Triangle p = newTriangle();
if(p.Sanjiaoxing() == true){
System.out.println("这个传说中的点在三角形内部");
}else {
System.out.println("孩子,在三角形外面了哦!");
}
}
}
class Triangle{
Point p = new Point(2,2);
Point p1 = new Point(4,1);
Pointp2 = new Point(1,1);
Pointp3 = new Point(3,3);
publicboolean Sanjiaoxing(){
if(p.f1() * p1.f1()>0 && p.f2() * p2.f2()>0&& p.f3() * p3.f3()>0){
return true;
}
returnfalse;
}
}
class Point{
private double a;
private double b;
public Point(doublea,double b){
this.a = a;
this.b = b;
}
public double f1(){
return a-b;
}
public double f2(){
return b + 2*a - 9;
}
public double f3(){
returnb=1;
}
}
其实在写这个程序的时候,我遇到了蛮多问题的,其中在那些方法f1,f2,f3中首先我是把这些放在了publicstatic的测试函数内,后来我错了,在cadn中问贴,有人告诉我某个类的方法要放在某个类里面定义,所以我把那些方法放在了Point里面定义,不过呢,又遇到了问题,那就是在构造方法时每一个方法名后面的括号应该为空,因为如果你的方法括号内有参数的话将无法使得在point类的方法应用到测试函数中。
整个判断点是否在三角形之内的算法是将三角形放在平面直角坐标系中,然后构造三个表示三角形三条边的方程的方法,算法证明如下:
因为:在直角坐标系中,如果要判断点D(a,b)是否在三角内的话,那么这个点必须与三角形一边f1对顶点A(a1,b1)点相同一侧,那么就是:
这个点D与A点带入方程的乘积必须大于零,也就是他们在方程中必须同号才能是同一侧,这么求出的只是点在三角形的哪一侧而已,要确定在不在三角形之内的话,就是D点分别和三个顶点在所对应的边方程中乘积的符号判定,三者都大于0,就在三角形之内,否则不是。此题这么证明。