Java:计算三角形的面积

import java.lang.Math; import java.awt.* public class Triangle implements Shape { java.awt.Point a; java.awt.Point b; java.awt.Point c; public Triangle(java.awt.Point a, java.awt.Point b, java.awt.Point c) { this.a = a; this.b = b; this.c = c; } public double getArea( ) { double area; return area = Math.abs((ac)*(ba)-(ab)*(ca)); } ... 

http://sofzh.miximages.com/java/fe56529cdaaaa9bb2f71c1ad8a1a454f.png < – 面积公式

我试图从2D笛卡尔坐标系中计算3点(x,y)的三角形面积。 我假设我的上面的公式正确地产生了三角形的区域(如果没有,请纠正我),但我的编译器说“运算符 – 不能应用于java.awt.Point,java.awt.Point”。 我假设它是这样说的,因为你不能相互减去点,但公式中的每个值都是x或y值,而不是点。 如何修复我的代码以便这样做? 谢谢!

根据维基百科, 你的公式是正确的 。 本文包含大量有用且清晰的数据。
根据java.awt.point文档 ,您应该使用getX()getY()方法,它们返回一个点的坐标值。

那是,

替代文字

应表达为:

 Math.abs((a.getX()-c.getX())*(b.getY()-a.getY())- (a.getX()-b.getX())*(c.getY()-a.getY()))*0.5; 

使用point.x可能不是一个好习惯,因为如果你有一个getter方法,你就不应该访问一个对象的变量。 这是接口和实现之间分离的一个方面:数据点point.x可能以多种forms存储,而不仅仅是int ; 接口方法确保每次使用时都会获得一个int。

编译器告诉你完全正确的事情。

 Math.abs((ac)*(ba)-(ab)*(ca) 

你忘了.x in ax .y in by etc.(ax – cx)* …

更新:我没有注意到OP与公式有关,这就是为什么我查找这个并对其进行编码的原因。 你应该使用另一个公式,因为这个涉及更多的计算(包括4次调用sqrt ,我认为这会很重)。


使用Heron的公式

 double distance(Point a, Point b) { double dx = ax - bx; double dy = ay - by; return Math.sqrt(dx * dx + dy * dy); } double getArea() { double ab = distance(a, b); double bc = distance(c, b); double ca = distance(a, c); double s = (ab + bc + ca) / 2; return Math.sqrt(s * (s - ab) * (s - bc) * (s - ca)) } 

如链接公式所示,不要用点计算,而是用x和y值计算。 我会留给你(这是家庭作业!)在java中做到这一点。

别忘了除以2。

使用ax - cx

只需阅读Javadoc: http : //java.sun.com/j2se/1.5.0/docs/api/java/awt/Point.html

根本问题:在Java中,像’+’和’ – ‘这样的运算符只允许用于原始类型(如byte,int,long),但不允许用于对象(通常)和数组。

其他语言允许运算符重载,所以在c ++中你可以为Point对象定义一个’+’操作,你的初始想法就是编译和运行。 但这在Java中是不可能的。

唯一的例外是String(它允许’添加’String对象)和Java 1.5+中的原始包装器(如Integer和Double)(自动装箱将它们转换回原语)