Umfang berechnen für Polygone

Brexoi

Mitglied
Hallo liebe Community,

ich hab eine Klasse namens Polygone:

Java:
import java.util.Arrays;

public class Polygon {
   private String bezeichnung;
   private Punkt[] eckpunkte;

   public Polygon() {
     eckpunkte = new Punkt[0];
     this.bezeichnung = "Testpoly ";
   }
 
   public Polygon(Punkt[] eckpunkte, String bezeichnung) {
     this.eckpunkte = eckpunkte;
     this.bezeichnung = bezeichnung;
   }

   public Polygon(Punkt[] eckpunkte) {
     this.eckpunkte = eckpunkte;
     this.bezeichnung = "";
   }
 
   public Punkt[] getEckpunkte() {
     return eckpunkte;
   }
 
   public int getAnzahlEcken() {
     return eckpunkte.length;
   }
 
   public void setEckpunkte(Punkt[] eckpunkte) {
     this.eckpunkte = eckpunkte;
   }
 
   public double[] berechneSeitenlaengen() {
     return new double[eckpunkte.length]; 
   }
 
   public double berechneUmfang() {
    return 0;
   }
 
   @Override
   public String toString() {
       return bezeichnung + 
               "mit N= " + getAnzahlEcken() + 
               ", U= " + berechneUmfang() +
               " und den Koordinaten P=" +Arrays.toString(eckpunkte);
   }
}

wie kann ich nun die Seitenlänge und den Umfang berechnen? Wüsste nicht wie ich das in den return abschnitt schreiben soll,..

Danke
 

Flown

Administrator
Mitarbeiter
Die Formel findest du hier: WIKI.

Du iterierst über deine Punkte und bildest die Kantenlängen, die du dann in dein Array speicherst und zurücklieferst.

Bei der Umfangberechnung holst du dir das Array mit den Kantenlängen und summierst sie auf.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Ah ok ich seh schon Bilder mag er gerade nicht Uploaden:
b331c1d29f0b2dd246e07cf9c7f0ce78.png
 
Zuletzt bearbeitet:

Brexoi

Mitglied
Danke dir, die formel unter Wicki kenn ich bereits, mein Problem ist eher, das ich bemerkt habe, das mir eine Methode für den Abstand noch fehlt um den Abstand 2er Punkte zu berechnen, ausserdem weiss ich gerade nicht was ich in die Formel "reinpacken" muss um das ergebnis zu bekommen,..
Es ist vielleicht etwas viel verlangt, aber könntest du mir vielleicht anhand meines Codes eine passende Methode für den Abstand sowie die berechnung der Seitenlänge und Umfang zeigen?

Ich meine (vermute) das ich weiss wie das geht, aber nicht niederschreiben kann.
Ich bräuchte zur berechnung der Seitenlänge zwei Koordinaten sprich A und B die Seitenlänge währe ja dann
AB = Wurzel (B1 - A1)² + (B2 - A2)²

Wenn ich das habe kann ich deine Formel dann auch benutzen (glaub ich)
Mein Problem liegt eher darin, das ich nicht gerade genau weiss, wie ich das ganze niederschreibe und einfüge,
da kommt noch hinzu das meine Koordinaten/Punkte ("Seitenlänge") in einer anderen Klasse sind und ich nicht weiss (vielleicht mit Super, hab ich gelesen,..) wie ich diese in die andere Klasse bekomme,.. falls mein gedankengang soweit überhaupt richtig ist,..
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Du kannst einen Pseudocode von mir haben. Ein wenig Eigeninitiative ist schon gefragt:
Code:
def berechneSeitenlaengen() : double[] = {
  var result = new double[eckpunkte.length];
  for(i from 0 to result.length) {
    var dx = eckpunkte[(i + 1) % eckpunkte.length].x - eckpunkte[i].x;
    var dy = eckpunkte[(i + 1) % eckpunkte.length].y - eckpunkte[i].y;
    result[i] = Math.sqrt(dx * dx + dy * dy);
  }
  return result;
}

Und zur Umfangsberechnung:
Code:
def berechneUmfang() : double = {
  var sum = 0d;
  for(d in berechneSeitenlaengen()) {
    sum += d;
  }
  return sum;
}
 
Zuletzt bearbeitet:

Brexoi

Mitglied
Na dann probier ich es mal, habe die berechnung für den Umfang soweit fertig:
Java:
 public double berechneUmfang() {
    double umfang = 0;
    for (int i=0; i<eckpunkte.length-1; i++)
    {
    umfang += eckpunkte[i].abstand(eckpunkte[i+1]);
    }
    return umfang;
}

Mein Problem liegt immer noch bei der Seitenlänge
Java:
public double[] berechneSeitenlaengen(){
     double[] result = new double[eckpunkte.length]; 
       int i;
     for (i from 0 to result.lenght) {
     double deltax = eckpunkte[(i + 1) % eckpunkte.lenght].x - eckpunkte[i].x;
     double deltay = eckpunkte[(i + 1) % eckpunkte.lenght].y - eckpunkte[i].y;
     result[i] = Math.sqrt(deltax * deltax + deltay *deltay);
   }
     return result;
   }

Ich verstehe nur nicht warum er mir .lenght aufeinmal als fehler anzeigt,..
 

Flown

Administrator
Mitarbeiter
for-Schleifen haben den Aufbau:
Java:
for(int i = 0; i < arr.length; i++) {
  ...
}

Deine Umfangsberechnung ist nicht richtig!
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Es ist falsch weil wie in der Formel oben, der letzte Punkt nicht mit dem ersten dazugerechnet wird (ist ja keine Linie, sondern ein Polygon). Darum hab ich in meinem Code ja das Modulo drinnen, der mir den Letzten auch noch dazunimmt.
 

Brexoi

Mitglied
Es ist falsch weil wie in der Formel oben, der letzte Punkt nicht mit dem ersten dazugerechnet wird (ist ja keine Linie, sondern ein Polygon). Darum hab ich in meinem Code ja das Modulo drinnen, der mir den Letzten auch noch dazunimmt.

Was ist den ein Modulo :oops: ?

Ps: vielleicht sollte ich erwähnen das ich recht frisch in der Java Welt bin und das mein 2tes übungsprogram ist, bin auch noch dabei das Buch "Java ist auch eine Insel" zu lesen,..
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Wenn du das Inselbuch lest, dann kannst du es auch Nachschlagen: HIER unter Der Restwert-Operator %.

Aber das muss man ja nicht mit Modulo machen sondern du kannst 1:1 die Formel, die ich oben von Wikipedia übernommen habe, verwenden.

Aber wie gesagt, dir fehlt die letzte Strecke vom letzten Punkt zum Anfangspunkt.
 

Brexoi

Mitglied
Wenn ich deine Formel 1:1 übernehme wird alles bei mir rot angezeigt, und genau diese letzte strecke bekomme ich einfach nicht hin, genauso wenig wie ich die Formel die ich für die abstand methode habe nicht niederschreiben kann weil ich nicht weiss welche punkte/koordinaten nutzen soll ...
 

Brexoi

Mitglied
Java:
public class Punkt {
    
   private final static int maxpos = 1023;
   private int xpos;
   private int ypos;
    double x,y;

   public Punkt(int xpos, int ypos) {
     this.xpos = xpos;
     this.ypos = ypos;
     
    if(xpos<0) {
    this.xpos = 0;
  } else if(xpos>maxpos) {
    this.xpos=maxpos;
  } else {
    this.xpos=xpos;
  }
   if(ypos<0) {
    this.ypos = 0;
  } else if(xpos>maxpos) {
    this.ypos=maxpos;
  } else {
    this.ypos=ypos;
  }
   }

   public Punkt() {
     this.xpos = 511;
     this.ypos = 511;
      }

   public int getXpos() {
     return this.xpos;
   }

   public void setXYpos(int xpos, int ypos) {
     this.xpos = xpos;
     this.ypos = ypos;
   }

   public int getYpos() {
     return this.ypos;
   }

   public Punkt verschiebeUm(int deltax, int deltay) {
     return new Punkt(xpos + deltax, ypos + deltay);
   }

   public Punkt verschiebeUm(Punkt deltaxy) {
     return new Punkt(xpos + deltaxy.xpos, ypos + deltaxy.ypos);
   }

   public String toString() {
     return "(" + xpos + "," + ypos + ")";
   }
 
   public double abstand(Punkt B) {
        return new Punkt Math.sqrt(this.x-this.x) * (this.x-this.x) + (this.y-this.y) * (this.y-this.y); //<<-- daran arbeite ich gerade bzw probiere rum
        
    }
   
}
 

Flown

Administrator
Mitarbeiter
Java:
public double berechneAbstand(Punkt other) {
  double dx = other.xpos - xpos;
  double dy = other.ypos - ypos;
  return Math.sqrt(dx*dx + dy*dy);
}

Der Code steht doch schon da für die Abstände!
 

Brexoi

Mitglied
Danke dir vielmals, jetzt bekomme ich zwar ein ergebnis in der Ausgabe für den Umfang aber der letzte Punkt fehlt halt noch,..
Siehst du anhand des Codes warum ich deine formel nicht 1:1 übernehmen kann?
 

Flown

Administrator
Mitarbeiter
Es steht doch alles schon da was du brauchst!

Java:
public double berechneUmfang() {
  double umfang = 0d;
  for (int i=0; i<eckpunkte.length; i++) {
    umfang += eckpunkte[i].abstand(eckpunkte[(i+1) % eckpunkte.length]);
  }
  return umfang;
}
 
Zuletzt bearbeitet:

Brexoi

Mitglied
Tut mir leid ich weiss nicht was ich stehen oder falsch hatte, hatte eigentlich gedacht ich hab es genau wie du so stehen gehabt, hab aber eine andere Ausgabe gehabt als eigentlich sein sollte, deswegen war ich etwas irrittiert, ich hab es nun so 1:1 übernommen und es klappt :) Danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Beats per Minute (BPM berechnen) Allgemeine Java-Themen 12
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
bittedanke Wie benötigte Bits berechnen (Huffmankodierung) Allgemeine Java-Themen 7
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
C Java Script Pause berechnen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
N Das große O berechnen Allgemeine Java-Themen 2
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
N Kombinationen beliebiger Größe berechnen Allgemeine Java-Themen 1
The Pi Anzahl der Gewichtscheiben berechnen Allgemeine Java-Themen 11
B Hirsch-Index berechnen Allgemeine Java-Themen 11
C pplet Mitelwert Berechnen Allgemeine Java-Themen 0
J Primzahlen berechnen Allgemeine Java-Themen 13
K F-Verteilung FINV in Java berechnen Allgemeine Java-Themen 4
A Helligkeit eines Bildes berechnen Allgemeine Java-Themen 1
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
C mp3-Lied Dauer berechnen Allgemeine Java-Themen 1
L Winkel eines Vektors berechnen [Anfängerprob] Allgemeine Java-Themen 5
R Threads Taskzeit berechnen Allgemeine Java-Themen 12
S Eclipse Entfernung berechnen Allgemeine Java-Themen 16
T Kreis und sekant schnittpunkt berechnen mit latitude longitude Allgemeine Java-Themen 4
B Java Diffentialgleichungen berechnen Allgemeine Java-Themen 3
W 2D-Grafik Kontrast eines Bildes berechnen Allgemeine Java-Themen 6
T Taylorpolynom berechnen Allgemeine Java-Themen 14
S Erste Schritte Mittelsenkrechte berechnen Allgemeine Java-Themen 3
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
S Werte aus 2 eindimensionale boolean arrays mithilfe von logischen operatoren berechnen Allgemeine Java-Themen 6
S Teiler Berechnen Allgemeine Java-Themen 6
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
J bewegliche Feiertage berechnen Allgemeine Java-Themen 7
W Rechnungsbetrag berechnen Allgemeine Java-Themen 2
reibi Checksumme für ein File berechnen Allgemeine Java-Themen 12
M Integral berechnen Allgemeine Java-Themen 5
D Primzahlen berechnen funktioniert nicht Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
Developer_X Prozentdifferenz berechnen. Allgemeine Java-Themen 13
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
M Monatliche Zeitspannen berechnen Allgemeine Java-Themen 3
Ark Arkussinus effizient berechnen Allgemeine Java-Themen 12
Iron Monkey Potenzzahlen mit shiftLeft berechnen? Allgemeine Java-Themen 13
N Rechenzeit berechnen? Allgemeine Java-Themen 3
H Schrifthöhe berechnen / Swing Allgemeine Java-Themen 5
T ungerade zahlen berechnen Allgemeine Java-Themen 3
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
G ganzzahlige Potenz schnell berechnen Allgemeine Java-Themen 4
M Lautstärke von Audiosignal live berechnen Allgemeine Java-Themen 7
S CRC wert berechnen ergibt 0 ? Allgemeine Java-Themen 9
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
T Arbeitsstunden berechnen Allgemeine Java-Themen 8
M Date Range auswerten und die Monate berechnen Allgemeine Java-Themen 2
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
G Richtung berechnen anhand Koordinaten Allgemeine Java-Themen 3
P Dauer (Tage, Stunden, Minuten, Sekunden) berechnen Allgemeine Java-Themen 5
D Mittelwert einer Menge von Doubles berechnen Allgemeine Java-Themen 3
P Winkel berechnen. Allgemeine Java-Themen 3
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
B Was würdet ihr dafür berechnen? Allgemeine Java-Themen 7
T MessageDigest von einem char[] berechnen Allgemeine Java-Themen 7
S den zweit niedrigsten wert in einem array berechnen Allgemeine Java-Themen 2
E CRC 8 Berechnen Allgemeine Java-Themen 1
M Math-String-Formel berechnen lassen Allgemeine Java-Themen 4
B Ellipsen Kreisbahnen berechnen! Allgemeine Java-Themen 11
M Alle möglichen Kombinationen von mehreren Objekten berechnen Allgemeine Java-Themen 6
clemente lanman und nt password berechnen Allgemeine Java-Themen 7
J an und bn berechnen Allgemeine Java-Themen 5
F Datum mit anzahl tagen berechnen Allgemeine Java-Themen 3
B Differenz in Monaten berechnen --- DateDiff()? Allgemeine Java-Themen 12
B Distance berechnen! Allgemeine Java-Themen 7
D Feiertage berechnen Allgemeine Java-Themen 8
F vergangene Zeit berechnen Allgemeine Java-Themen 6
R Zeitspannen berechnen Allgemeine Java-Themen 7
N 2 hoch 100 berechnen Allgemeine Java-Themen 8
P Punkt berechnen Allgemeine Java-Themen 4
C x-te Wurzel berechnen Allgemeine Java-Themen 2
M Formel in einem String während Laufzeit berechnen. Allgemeine Java-Themen 4
W Vergleichstool für xml-Dateien Tortoise-svn Verknüpfung Allgemeine Java-Themen 2
Zrebna Tipps für Organisation von Code-Reviews nach einem Pull Request. Allgemeine Java-Themen 5
Zrebna Bitte um Empfehlungen für "zeitlose" Bücher bzgl. Backend mit Spring und Beans Allgemeine Java-Themen 25
D Lesbare args für die main-Methode Allgemeine Java-Themen 6
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben