Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Kugel durch 4 Punkte in C# konstruieren(LGS/Matrix): welche Klasse/Methode?

Empfohlene Antworten

Veröffentlicht

Hallo!

Ich möchte in C# eine Kugel anhand von 4 Punkten (bzw. 5, da diese Anzahl fest vorgegeben ist) berechnen. Gegeben sind, wie bereits erwähnt, 4 Punkte mit jeweils X,Y und Z Koordinate.

Nun habe ich versucht dieses Vorgehen nachzubilden:

Kugel durch 4 Punkte konstruieren (siehe "Beispiel")

Bisher verwendete ich die Matrix3D Klasse (System.Windows.Media.Media3D)

Matrix3D Structure (System.Windows.Media.Media3D)

um ein Matrix-Objekt zu erstellen und anschließend mit den Koordinaten-Werten zu befüllen. Ich dachte mir, anhand einer Methode die Unbekannten A,B,C,D zu bestimmen und durch eine Division durch 2 für B,C,D den Mittelpunkt der Kugel bestimmen zu können.

Nun weiss ich nicht, ob ich hierfür die korrekte Klasse verwende bzw. ob es überhaupt eine passende Klasse für mein Vorhaben gibt.

Falls mir die Klasse Matrix3D doch weiterhilft: mit welcher Methode ist es möglich, die Unbekannten zu bestimmen?

Zur Info: die Determinanten ( -(x2 + y2 + z2) ) der Koeffizientenmatrix bestimme ich mit 4 (bzw. 5) double-Variablen. Diese stehen also auch zur Verfügung, falls eine Methode diese benötigt (und nicht selbst errechnet).

Ich danke bereits im Voraus!

Gruß

Faby

Stell die Matrix auf und betrachte sie als lineares Gleichungssystem (LGS) und löse es. Hierfür sollte man aus der Schule Gaußsches Eliminationsverfahren kennen, was man aber in der Realität nicht verwendet, man verwendet ein numerisches Verfahren wie Gaußsches Eliminationsverfahren

Für die Lösung gibt es spezielle Bibliotheken, die sich "Solver" nennen mit denen man solche LGS numerisch lösen kann. Eine Bibliothek, die das bewerkstelligt wäre LAPACK

Hallo flashpixx,

danke.LAPACK scheint unter der BSD-Lizenz zu stehen. Ist das Kompilieren einer solchen Library in eine .dll möglich und anschließend auch im .NET Framework verwendbar? Kennst du hierfür evtl. ein Tutorial für die Kompilierung? Finde gerade nur Tutorials für C, C++ und Haskell.

Got it.

LAPACK for Windows

Ich melde mich nach der Implementierung sicherlich nochmals. Daher Thread bitte nicht schließen.

LAPack habe ich selbst unter Cygwin laufen. Inwieweit man das in C# dann einbinden kann, da muss ich passen, da ich mit C# nicht arbeite, sondern mit C++. Als Alternativen wäre Math Kernel Library from Intel - Intel® Software Network denkbar. Du benötigst lediglich einen LGS Solver, evtl wird Dir so etwas auch durch andere Bibliotheken zur Verfügung gestellt

Ich bevorzuge hier lieber Freeware bzw. bereits enthaltene Librarys aus dem .NET Framework, da das Projekt für ein Unternehmen entwickelt wird.

Evtl. kann ein C#-Kenner noch einen Tipp aussprechen?

Danke bisher flashpixx.

So. Ich verwende nun DotNumerics (DotNumerics).

Kennt sich hier jemand damit aus und kann mir speziell in meinem Fall weiterhelfen?

Ich bevorzuge hier lieber Freeware bzw. bereits enthaltene Librarys aus dem .NET Framework, da das Projekt für ein Unternehmen entwickelt wird.

Evtl. kann ein C#-Kenner noch einen Tipp aussprechen?

Danke bisher flashpixx.

BSD-Lizenz heißt nicht, dass es für den kommerziellen Gebrauch nicht geeignet ist, im Gegenteil. BSD sorgt dafür, dass das ursprüngliche Projekt Open bleibt. Was danach kommt, ist im Prinzip egal. Ich empfinde BSD als eine freiere Lizenz - hat aber den Nachteil, dass eventuelle Weiterentwicklungen eben nicht mehr offengelegt werden müssen. Also kein Copyleft.

BSD-Lizenz heißt nicht, dass es für den kommerziellen Gebrauch nicht geeignet ist, im Gegenteil. BSD sorgt dafür, dass das ursprüngliche Projekt Open bleibt. Was danach kommt, ist im Prinzip egal. Ich empfinde BSD als eine freiere Lizenz - hat aber den Nachteil, dass eventuelle Weiterentwicklungen eben nicht mehr offengelegt werden müssen. Also kein Copyleft.

Mit

Ich bevorzuge hier lieber Freeware bzw. bereits enthaltene Librarys aus dem .NET Framework, da das Projekt für ein Unternehmen entwickelt wird.
habe ich mich auf Math Kernel Library from Intel - Intel® Software Network bezogen.

Was die BSD-Lizenz bewirkt, weiß ich ;)

Nun weiss ich nicht, ob ich hierfür die korrekte Klasse verwende bzw. ob es überhaupt eine passende Klasse für mein Vorhaben gibt.

Die Klasse beschreibt zwar auch eine 4x4 Matrix, bietet aber nicht das, was Du sucht (das wäre ein Solver). Es gibt dafür natürlich fertige Implementierungen, selbst machen ist für nicht zeitkritische oder numerisch ungünstige Fälle aber auch nicht allzu schwer.

Die Klasse beschreibt zwar auch eine 4x4 Matrix, bietet aber nicht das, was Du sucht (das wäre ein Solver).

Das hatte ich in meinem ersten Posting schon erwähnt!

Es gibt dafür natürlich fertige Implementierungen, selbst machen ist für nicht zeitkritische oder numerisch ungünstige Fälle aber auch nicht allzu schwer.

Auch das hatte ich erwähnt und darauf hingewiesen, dass man dieses mit Hilfe einer LR / LU Zerlung durchführen kann!

Das hatte ich in meinem ersten Posting schon erwähnt!

Auch das hatte ich erwähnt

Und wo ist dabei jetzt das Problem?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.