【求解】已知三角形各点坐标,求三角形面积。
各位大神,以下是我求三角形面积的代码,还请大神们看看哪里错了,我输入坐标后,最后结果都显示为1.0,神奇了。
import java.util.*;
class MyClass{
public static void main(String args[]){
Scanner input = new Scanner(System.in);
System.out.print("Please enter the pixel:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double x3 = input.nextDouble();
double y3 = input.nextDouble();
double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
double side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1/2);
double side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1/2);
double s =(side1 + side2 + side3)/2;
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
System.out.println("The triangle area ia " + area);
}
}
------解决方案--------------------1 Math 类里pow()的定义,public static double pow(double a,double b),要求传入的参数是double型的。
2 double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
看这语句,x1,x2,y1,y1都是double的,int 型字面量“2”转型为double 是2.0.
3 关键是那个 1/2,这个转换过程是 1 2都是int型字面量,程序先按整型计算1/2,结果是0,之后把这个0 转
成double型,结果是0.0.
4 所以楼主的代码相当于:
double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),0);
算下来:
三个边都是1。
后面的计算面积的代码:
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
相当于:
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),0);
所以这个area=1.0.
试试下面的代码:
import java.util.*;
public class CalculateTheAreaOfTriangle1
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
System.out.println("Please enter the pixel:");
double x1 = input.nextDouble();
double y1 = input.nextDouble();
double x2 = input.nextDouble();
double y2 = input.nextDouble();
double x3 = input.nextDouble();
double y3 = input.nextDouble();
double side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1/2);
System.out.println("side 1 is "+side1);
double side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1/2);
System.out.println("side 2 is "+side2);
double side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1/2);
System.out.println("side 3 is "+side3);
double s =(side1 + side2 + side3)/2;
double area =Math.pow((s*(s-side1)*(s-side2)*(s-side3)),1/2);
System.out.println("The triangle area is " + area);
side1 =Math.pow((Math.pow((x1-x2), 2)+Math.pow((y1-y2),2)),1.0/2); //1/2 变成1.0/2或者(double)1/2)
System.out.println("side 1 is "+side1);
side2 =Math.pow((Math.pow((x2-x3), 2)+Math.pow((y2-y3),2)),1.0/2);
System.out.println("side 2 is "+side2);
side3 =Math.pow((Math.pow((x3-x1), 2)+Math.pow((y3-y1),2)),1.0/2);