创建3个函数,分别对应3个三角形的创建方法,用随机数生成0-3的随机数,用来确定跟那条边重叠,代码如下:
public class Triangle {
private int nlen; //边长
private int xstart; //矩形左下角x坐标
private int ystart; //矩形左下角y坐标
private double[][] points; //三个顶点
Triangle(int x,int y,int len){
xstart = x;
ystart = y;
nlen = len;
points = new double[3][2];
}
Triangle(int len){
xstart = 0;
ystart = 0;
nlen = len;
points = new double[3][2];
}
//三角形一条边正好重叠正方形一条边,另外一点在正方形对面一条边的中点
void create1(){
int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
switch(index)
{
case 0: //左边
points[0][0] = xstart;
points[0][1] = ystart;
points[1][0] = xstart;
points[1][1] = ystart + nlen;
points[2][0] = xstart + nlen;
points[2][1] = ystart + nlen/2.0;
break;
case 1: //上边
points[0][0] = xstart;
points[0][1] = ystart + nlen;
points[1][0] = xstart + nlen;
points[1][1] = ystart + nlen;
points[2][0] = xstart + nlen/2.0;
points[2][1] = ystart;
break;
case 2: //右边
points[0][0] = xstart + nlen;
points[0][1] = ystart + nlen;
points[1][0] = xstart + nlen;
points[1][1] = ystart;
points[2][0] = xstart;
points[2][1] = ystart + nlen/2.0;
break;
case 3: //下边
points[0][0] = xstart;
points[0][1] = ystart;
points[1][0] = xstart + nlen;
points[1][1] = ystart;
points[2][0] = xstart + nlen/2.0;
points[2][1] = ystart + nlen;
break;
}
}
//三角形一条边正好重叠正方形一条边,对面一点可以随意设置而构成的三角形
void create2(){
int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
switch(index)
{
case 0: //左边
points[0][0] = xstart;
points[0][1] = ystart;
points[1][0] = xstart;
points[1][1] = ystart + nlen;
points[2][0] = xstart + nlen;
points[2][1] = (int)((nlen*Math.random()))+ystart;
break;
case 1: //上边
points[0][0] = xstart;
points[0][1] = ystart + nlen;
points[1][0] = xstart + nlen;
points[1][1] = ystart + nlen;
points[2][0] = (int)((nlen*Math.random()))+xstart;
points[2][1] = ystart;
break;
case 2: //右边
points[0][0] = xstart + nlen;
points[0][1] = ystart + nlen;
points[1][0] = xstart + nlen;
points[1][1] = ystart;
points[2][0] = xstart;
points[2][1] = (int)((nlen*Math.random()))+ystart;
break;
case 3: //下边
points[0][0] = xstart;
points[0][1] = ystart;
points[1][0] = xstart + nlen;
points[1][1] = ystart;
points[2][0] = (int)((nlen*Math.random()))+xstart;
points[2][1] = ystart+nlen;
break;
}
}
//生成三角形,3个点在不同的3条边上
void create3(){
int index = (int)(Math.random()*3); //生成0-3的随机数,对应 左边、上边、右边、下边
//排除该边,使用剩余的3条边
switch(index)
{
case 0: //不用左边
//上边点
points[0][0] = (int)((nlen*Math.random()))+xstart;
points[0][1] = ystart+nlen;
//右边点
points[1][0] = xstart + nlen;
points[1][1] = (int)((nlen*Math.random()))+ystart;
//下边点
points[2][0] = (int)((nlen*Math.random()))+xstart;
points[2][1] = ystart;
break;
case 1: //不用上边
//左边点
points[0][0] = xstart;
points[0][1] = (int)((nlen*Math.random()))+ystart;
//右边点
points[1][0] = xstart + nlen;
points[1][1] = (int)((nlen*Math.random()))+ystart;
//下边点
points[2][0] = (int)((nlen*Math.random()))+xstart;
points[2][1] = ystart;
break;
case 2://不用右边
//左边点
points[0][0] = xstart;
points[0][1] = (int)((nlen*Math.random()))+ystart;
//上边点
points[1][0] = (int)((nlen*Math.random()))+xstart;
points[1][1] = ystart + nlen;
//下边点
points[2][0] = (int)((nlen*Math.random()))+xstart;
points[2][1] = ystart;
break;
case 3: //不用下边
//左边点
points[0][0] = xstart;
points[0][1] = (int)((nlen*Math.random()))+ystart;
//上边点
points[1][0] = (int)((nlen*Math.random()))+xstart;
points[1][1] = ystart+nlen;
//右边点
points[2][0] = xstart + nlen;
points[2][1] = (int)((nlen*Math.random()))+ystart;
break;
}
}
//计算边长
double triLength(double x1,double y1,double x2,double y2){
return Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1));
}
//计算三角形的面积
double area(){
double a = triLength(points[0][1],points[0][0],points[1][1],points[1][0]);
double b = triLength(points[0][1],points[0][0],points[2][1],points[2][0]);
double c = triLength(points[2][1],points[2][0],points[1][1],points[1][0]);
double q = (a+b+c)/2;
return Math.sqrt(q*(q-a)*(q-b)*(q-c));
}
//显示坐标点
void show(){
System.out.print("("+points[0][0]+","+points[0][1]+") ");
System.out.print("("+points[1][0]+","+points[1][1]+") ");
System.out.println("("+points[2][0]+","+points[2][1]+")");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Triangle t1 = new Triangle(10);
t1.create1();
t1.show();
System.out.println("area="+t1.area());
Triangle t2 = new Triangle(10);
t2.create2();
t2.show();
System.out.println("area="+t2.area());
Triangle t3 = new Triangle(10);
t3.create3();
t3.show();
System.out.println("area="+t3.area());
}
}