Java: Berechnung der Fläche eines Dreiecks
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((a-c)*(b-a)-(a-b)*(c-a));
} ...
http://upload.wikimedia.org/math/f/e/5/fe56529cdaaaa9bb2f71c1ad8a1a454f.png <--Bereich Formel
Ich versuche, Berechnung der Fläche eines Dreiecks aus den 3 Punkten (x,y) aus einem 2D kartesischen Koordinatensystem. Ich gehe davon aus, dass meine obige Formel korrekt ergibt die Fläche eines Dreiecks (wenn nicht, bitte korrigieren Sie mich), aber mein compiler sagt "Betreiber - nicht angewandt werden kann java.das awt.Point,java.das awt.Punkt". Ich gehe davon aus, dass es das sagt, weil Sie nicht subtrahieren Punkte von einander, aber jeder Wert in der Formel ist entweder eine x-oder y-Wert, kein Punkt. Wie kann ich fix meinen code, damit dies funktionieren würde?
Danke!
InformationsquelleAutor dukevin | 2010-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Wikipedia, Sie Formel ist korrekt. Der Artikel enthält viele nützliche und Daten löschen.
Nach der java.das awt.Punkt Dokumentation, sollten Sie die
getX()
undgetY()
Methoden, die die Koordinaten-Wert von einem Punkt.Ist,
Sollte ausgedrückt werden als:
Ist es wahrscheinlich nicht so eine gute Praxis zu verwenden
point.x
, da sollte man nicht den Zugriff auf ein Objekt variable, wenn Sie eine get-Methode, die das tut. Dies ist ein Aspekt der Trennung zwischen Schnittstelle und Implementierung: die Datenpoint.x
gespeichert werden könnten, in vielen Formen, nicht nurint
; Die interface-Methode stellt sicher, dass Sie erhalten einen int-jedes mal, wenn Sie es verwenden.Ich Stimme völlig über die Verwendung von get-und Set-Methoden: es ist eine gute Praxis im Allgemeinen, das passiert nur, eine Ausnahme zu sein. Die Klasse
Point
verwendet wird, ist ein Teil des AWT, Abstract Window Toolkit, soll für die Malerei-Grafik auf den Bildschirm, wo die Reaktionszeit ist kritisch. So, da accesing eine variable ist schneller als der Aufruf einer Methode, interne Felder ausgesetzt sind, in vielen AWT-Klassen. Alles gesagt von @adam-matan ist vollkommen richtig, wollte nur darauf hinweisen, warumjava.awt.Point
ist nicht der mathematische Punkt und warum das geschieht.Danke! Gut zu wissen.
InformationsquelleAutor Adam Matan
compiler sagt Ihnen die genaue richtige.
haben Sie vergessen .x in einem.x .y in b.y usw. das ist (ein.x - c.x)* ...
InformationsquelleAutor Fakrudeen
Update: ich habe nicht bemerkt, dass OP hatte mit einer Formel verknüpft, das ist, warum ich sah das ein und codiert es. Sollten Sie mit der anderen Formel als diese beinhaltet weitere Berechnungen (einschließlich 4 Aufrufe
sqrt
ich denke, das wäre schwer).Mit Heron ' s Formel
InformationsquelleAutor Amarghosh
Als die verlinkte Formel sagt, keine Berechnung mit den Punkten aber mit Ihren x - und y-Werte. Ich überlasse es Ihnen (es ist Hausaufgabe!) zu tun, dass in java.
Und nicht vergessen, durch 2 dividieren.
InformationsquelleAutor Kai Huppmann
Verwenden
a.x - c.x
etc.Nur Lesen der Javadoc:
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Point.html
InformationsquelleAutor nekman
Das zugrunde liegende problem: In Java Operatoren wie '+' und '-' sind nur bei primitiven Typen (wie byte, int, long), aber nicht für Objekte (im Allgemeinen) und arrays.
Anderen Sprachen ermöglichen-operator überladen, so in c++ definieren Sie ein ' + ' - Betrieb für Point-Objekte, und es Ihre erste Idee wäre, kompilieren und ausführen. Aber das ist nicht möglich in Java.
Die einzigen Ausnahmen sind Zeichenfolge (es ist erlaubt, 'hinzufügen', String-Objekte sind) und die primitiven Wrapper, wie Integer und Double in Java 1.5+ (autoboxing konvertiert Sie zurück in primitive)
InformationsquelleAutor Andreas_D