[OpenSource] MathUtils 2.4.3 - erweiterte Mathematikbibliothek

    • Release
    • Open Source

    Es gibt 104 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

      Ich glaube ich ändere einfach die Klassen in Strukturen und gut ist. Ich hab ein paar Tage intensiv daran gearbeitet und möchte jetzt ungern wieder alles neu machen (und dann auch noch in doppelter Ausführung), zumal ich wahrscheinlich mit den Interfaces niemals die selbe Qualität hinbekommen würde, wie momentan mit den Klassen (da entsteht bei mir gerade nur Clusterfuck).
      Würd' an deiner Stelle eh eine Kopie davon anfertigen, bevor du groß Änderungen vornimmst. Meist sind' solche Architektureingriffe dann doch etwas größer. Interfaces sind ja von der Logik her nichts anderes, als abstrakte Klassen, wobei eine Klasse eben mehrere davon implementieren kann.

      Gruß
      ~blaze~

      Überarbeitete Version fertig

      Geändert wurde:
      - Vektoren auf Basis eines Interfaces komplett neu strukturiert
      - für Projektion 3D -> 2D ist jetzt nicht mehr der MathHelper zuständig, sondern Vector4 (wegen objektorientiertem Konzept und so)
      - die Squarematrix hat jetzt eine neue Eigenschaft "IsSingular" und wird beim Berechnen der Inversen eine Exception feuern, wenn diese true ist
      - Namensänderungen für einige Methoden (ergeben jetzt unter anderem mehr Sinn)

      Außerdem habe ich den Beispielcode aktualisiert und mit Kommentaren versehen.

      Ich habe das neue Klassendiagramm (PointD usw. sind nicht mehr zu sehen, da diese nur ein kleines Extra sind und sich identisch zu PointF usw. verhalten) und das Zippaket bereits hochgeladen. Ich werde gleich auch noch den neuen Quellcode auf GitHub online stellen. Ist jetzt einsehbar.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

      Großes Update

      Da ich hier ja viele Verbesserungsvorschläge erhalten habe, und auch selbst nicht ganz mit der Lib zufrieden war, habe ich eine komplett überarbeitete Version 2.0 geschrieben.
      Hier die Änderungen im Detail:
      • Das komplette Konzept der Vektoren wurde von Klasse zu Interface geändert. Die Grundfunktionen sind nun als Extensions implementiert, und die ehemaligen Klassen sind jetzt Strukturen.
      • Ich fand, dass einfache Neuimplementationen von PointF, SizeF und RectangleF mit doppelter Genauigkeit einer Lib, die sich "erweiterte Mathematikbibliothek" nennt, nicht gerecht wird. Deswegen sind die Klassen PointD, SizeD und RectangleD komplett rausgeflogen. Stattdessen wurden andere Klassen implementiert, die deren Funktionalität übernehmen und erweitern (siehe weitere Punkte).
      • Vektoren gibt es jetzt in einer Speziellen Ausführung, die Ortsvektoren repräsentiert. Dies sind die Strukturen Point2D und Point3D. Sie arbeiten eng mit den bestehenden Strukturen Vector2 und Vector3 zusammen, da sie gegenseitig Operatorüberladungen implementieren.
      • Als Ersatz für RectangleD gibt es jetzt einen komplett neuen Namespace, Artentus.Utils.Geometry. Dort befinden sich Funktionen, mit denen es möglich ist, die bekannten Test für beliebige Polygone durchzuführen, darunter IntersectsWith und Contains.

      Ich hoffe euch gefallen diese massiven Änderungen. Wenn jemand noch Anregungen hat kann er sie gerne äußern.

      Ich werde auch gleich noch den Source auf GitHub aktualisieren. Ist jetzt online.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Artentus“ ()

      Erst einmal ein großes Lob! Diese Lib erspart einem enormst viel Arbeit wenn man Spiele, egal ob 2D oder 3D, erstellt. Meine Frage ist nur ob es dir möglich wäre die Source deiner TestApp bereitzustellen,ich würde gerne mal sehen wie du als Entwickler selbst die Lib nutzt..^^
      mfg
      Paul
      "yippieh! it compiles - ship it!"
      @Artentus:

      Habe noch eine Idee was du einbauen könntest(mit etwas mehr Aufwand verbunden ^^):

      man gibt zwei Geradengleichungen an und nun wird berechnet ob sie:
      - parallel sind
      - windschief zueinander sind
      - einen Schnittpunkt haben (wenn ja wo?)
      - die gleiche Gerade beschreiben

      Das ganze für 3 Dimensionen natürlich ^^

      8-) faxe1008 8-)
      Haben das gerade in Mathe. Tipps dir kurz mal ab.
      Bestimmung der Lage zweier Geraden g:x = p + r *u und h:x = q + s*v
      Sind die Richtungvektoren u und v parallel zueinander (vielfaches voneinander)
      / \
      ja / \ nein
      / \
      Liegt der Punkt p mit dem Ortsvektor p' Hat die Gleichung p + r*u = q + s* v
      auf der Geraden h? mehr als eine Lösung?
      ja / \nein / ja \nein
      gleiche Gerade parallel schneiden windschief

      8-) faxe1008 8-)
      @Artentus
      Ernsthaft??? Ich bin erst in der 8. und unser Lehrer hat uns das alles schon erklärt :P.

      //EDIT: Vielleicht kommts auch drauf an, in welchem Bundesland man auf was für eine Schule geht.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets3646“ ()

      Hi,

      Da es eh Hausaufgabe war tipp ich dir mal kurz ab(Beispiel):
      Spoiler anzeigen

      Prüfe auf Schnittpunkte, Paarallelität, Gleichheit, oder windschief:

      g:x = (5,0,1) + r * (2,1,-1)
      h:x = (7,1,2) + t* (-6,-3,3)

      1.) Auf Parallelität prüfen (sind die Richtungvektoren vielfache voneinander?)
      2*x = -6
      x => -3

      für die anderen Koodinaten prüfen:
      1* -3 = -3 stimmt
      -1 * -3 = 3 stimmt
      ==> Die Richtungsvektoren sind vielfache voneinander (===> also sind sie entweder parallel oder sie beschreiben dieselbe Gerade)

      2) Liegt der Punkt P auf dem Ortsvektor p auf der Geraden von h (den Ortsvektor von g verwenden für Punktprobe in h)
      (5,0,1) = (7,1,2) + t* (-6,-3,3)
      erste Koordinate:
      5 = 7 + t * -6
      t = (-2)/ (-6)
      => t = 1/3

      Durch Einstezen für die übrigen Koordinaten prüfen:
      1 + (1/3) * -3 = 0 stimmt
      2 + (1/3) * 3 = 1 stimmt nicht

      =====> Ergebnis: Die Geraden h und g sind parallel zueinander :)

      8-) faxe1008 8-)
      In diesem Update gab es folgende Neuerungen/Änderungen:
      • Mehr Polygonarten hinzugefügt
      • Line3D-Klasse hinzugefügt
      • IVector implementiert nun IEquatable
      • Effizientere Methode zur Bestimmung der konvexen Hülle (Graham Scan)

      Das komplette VS-Projekt gibt es jetzt auch im Startpost zum Download.
      Cool funktioniert alles super :thumbup:

      Allerdings eine Sache von der ich nciht weiß was sie bringt und ich sie deshalb nicht testen konnte :

      Artentus schrieb:

      IVector implementiert nun IEquatable


      PS: Hatte am Wochenende mal wieder Langeweile und habe mir auch eine Klasse zum Vergleich von Geraden geschrieben ^^

      8-) faxe1008 8-)