Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/skn0tt/bwinf36a3
36. Bundeswettbewerb Informatik, Aufgabe 3: Dreiecke Zählen
https://github.com/skn0tt/bwinf36a3
bwinf geometry graph-theory
Last synced: 13 days ago
JSON representation
36. Bundeswettbewerb Informatik, Aufgabe 3: Dreiecke Zählen
- Host: GitHub
- URL: https://github.com/skn0tt/bwinf36a3
- Owner: Skn0tt
- Created: 2017-09-12T15:23:49.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T02:37:17.000Z (11 months ago)
- Last Synced: 2024-10-06T04:02:12.658Z (about 1 month ago)
- Topics: bwinf, geometry, graph-theory
- Language: Java
- Size: 1.78 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# bwInf36A3
36. Bundeswettbewerb Informatik, Aufgabe 3: Dreiecke zählen## Aufgabe
Janina hat von ihrer Freundin Nadine ein Rätsel
aus dem Internet zugeschickt bekommen: Wie viele
Dreiecke sind in dieser Zeichnung zu sehen?Nachdem Janina eine Weile Dreiecke gezählt hat,
will sie ihr Ergebnis im Internet nachprüfen. Sie
findet aber keine Lösung, sondern nur weitere
Rätsel dieser Art. Da sie sich nicht jedes Mal erneut
ans Zählen machen will, überlegt sie, ob sich
solche Rätsel mit einem Computer lösen lassen.### Aufgabenstellung
Versetze dich in Janinas Lage und schreibe ein
Programm, das die Dreiecke in einer Rätsel-Zeichnung
zählt. Eine Zeichnung besteht aus einigen Strecken.
Du kannst davon ausgehen, dass keine zwei Strecken
auf derselben Geraden liegen und dass sich nie mehr
als zwei Strecken im gleichen Punkt schneiden.
In der obigen Zeichnung sind übrigens neun Dreiecke
zu finden.
Wende dein Programm auf die Beispiele an, die du
auf den BwInf-Webseiten findest.## Ansatz
* Darstellung der Punkte u. Schnittpunkte in einen Graph
* 3-Schrittige Kreisläufe finden## Todo
- [x] Punkte einlesen
- [x] Schnittpunkte bestimmen
- [ ] Kreisläufe finden
- [ ] Grafische Ausgabe## Notes
### Punkte einlesen
Funktion `List einlesen(File... files)`
* Iteriert durch Dateien
* Scanner: 1ste Zeile wird übersprungen
* Iteriert durch Zeilen:
* Zeile an " " splitten
* Liste 2 neue Line2D anhängen
### Schnittpunkte bestimmen
`Line2D.intersectsLine()` hilft ungemein
* Eintragen aller Line2D in Hashmap
* Key: `line.toString()`
* Value: `new Node(line)`
* Iterieren durch `lines`, Laufvariable: `line`
* Iterieren durch `lines`, Laufvariable: `vergleich`
* falls `line == vergleich`: Nächster Durchlauf (Um Selbst-Referenz zu vermeiden)
* else: `vergleich` zu Intersects von `line`'s Eintrag in der HashMap hinzufügen
## TODO
- Point2D to Line2D