Autor |
Beitrag |
AXMD
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Fr 26.05.06 22:08
Complex Library
Was ist die Complex Library?
Complex Library ist eine Bibliothek für .NET 2.0 (geschrieben in C#), die Datentypen und Methoden zum Berechnen und Darstellen von komplexen Zahlen bereitstellt. Sie definiert den Namespace DSComplexLib.Calculation mit der Klasse ComplexNumber, die die komplexe Zahl ansich darstellt und diverse Funktionen (zum Formatieren, Parsen, Rechnen...) bereitstellt, sowie den Namespace DSComplexLib.Visualization zur grafischen Darstellung von komplexen Zahlen.
Weitere Informationen findet ihr in der angehängten Dokumentation (siehe Posting unten!), einen Screenshot der Demo ebenfalls. Hinweis: die Demo zeigt nur einen Bruchteil der Funktionalität, allerdings ist dafür auch dementsprechend wenig Quelltext notwendig (siehe Code unten).
Verwendungs-Beispiele
Hier ein Beispiel, wie zwei komplexe Zahlen dividiert und die Wurzel des Ergebnisses berechnet und auf einem Label dargestellt werden kann:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| using DSComplexLib.Calculation;
ComplexNumber c1 = ComplexNumber.j; ComplexNumber c2 = new ComplexNumber(1, 2); ComplexNumber c = (c1 / c2).Sqrt(); c.SetAngleRestriction(AngleRestriction.ar0To2Pi); label1.Text = c.ToCompString(); label2.Text = c.ToPolarString(false); |
Und hier ein Beispiel, wie man zwei Strings in eine komplexe Zahl umwandeln und addieren kann:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| using DSComplexLib.Calculation;
String s1 = "1+j2"; String s2 = "1*e^j90°"; ComplexNumber c = ComplexNumber.Parse(s1) + ComplexNumber.Parse(s2); label1.Text = c.ToCompString(); |
Hier ein Teil des Sourcecodes der Demo - ihr braucht nur eine leere Form - die entsprechenden Eventhandler sind einzustellen .DLL in die Referenzen hinzufügen nicht vergessen. Die Kommentare sollten selbsterklärend sein.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| using System;
using DSComplexLib.Calculation; using DSComplexLib.Visualization;
namespace DSComplexLibDemo { public partial class Form1 : Form { ComplexPlane cPlane;
public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { cPlane = new ComplexPlane(this.CreateGraphics()); cPlane.SetSmoothingMode(SmoothingMode.AntiAlias); Pen AuxiliaryPen = new Pen(Color.LightGray, 1); AuxiliaryPen.DashStyle = DashStyle.Dot; cPlane.SetAuxiliaryRasterPen(AuxiliaryPen); cPlane.AddCircle(Circle.UnitCircle); cPlane.AddCircle(new Circle(Pens.Black, Math.Sqrt(2))); ComplexPhasorGroup g1 = new ComplexPhasorGroup("Group 1", false); g1.AddPhasor(new ComplexPhasor(new ComplexNumber(1, 1), Pens.Red, "Phasor 1", true, true, ContentAlignment.TopLeft, false, ContentAlignment.BottomLeft, new Font("Verdana", 10), Brushes.Red)); g1.AddPhasor(new ComplexPhasor(new ComplexNumber(1, -1), Pens.Blue, "Phasor 2", true, true, ContentAlignment.BottomLeft, false, ContentAlignment.TopLeft, new Font("Verdana", 10), Brushes.Blue)); cPlane.AddPhasorGroup(g1); ComplexPhasorGroup g2 = new ComplexPhasorGroup("Group 2", true); g2.AddPhasor(new ComplexPhasor(new ComplexNumber(-1, -1), Pens.Green, "Phasor 3", true, true, ContentAlignment.BottomRight, false, ContentAlignment.TopRight, new Font("Verdana", 10), Brushes.Green)); g2.AddPhasor(new ComplexPhasor(new ComplexNumber(0, 2), Pens.Purple, "Phasor 4", true, true, ContentAlignment.MiddleLeft, false, ContentAlignment.MiddleRight, new Font("Verdana", 10), Brushes.Purple)); cPlane.AddPhasorGroup(g2); }
private void Form1_Paint(object sender, PaintEventArgs e) { cPlane.Render(this.ClientSize.Width, this.ClientSize.Height); }
private void Form1_Resize(object sender, EventArgs e) { Form1_Paint(sender, null); }
private void Form1_MouseMove(object sender, MouseEventArgs e) { if (((MouseEventArgs)e).Button == MouseButtons.Left) cPlane.StretchSelectedPhasor(((MouseEventArgs)e).Location); }
private void Form1_MouseDown(object sender, MouseEventArgs e) { cPlane.SelectPhasor(((MouseEventArgs)e).Location); } } } |
Lizenz
Die Bibliothek darf frei verwendet und modifiziert werden, solange ich als ursprünglicher Autor genannt werde. Für Details bitte den Lizenztext in der angehängten readme.txt lesen.
Download
Die Dateien findet ihr im Anhang.
Würde mich über jegliche Art von Kritik und eventuelle Verbesserungsvorschläge freuen
AXMD
//EDIT: Diverse Aktualisierungen (v.a. Files)
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von AXMD am So 04.06.06 16:26, insgesamt 6-mal bearbeitet
|
|
AndyB
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Sa 27.05.06 14:37
Ist das "j" ein Schreibfehler, oder heißt das neuerdings "Jmaginärteil" ?
_________________ Ist Zeit wirklich Geld?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 27.05.06 14:42
Es gibt beide Schreibweisen (also 5+3*i und 5+3*j). Andreas hat wohl letztere gelernt.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 27.05.06 15:01
Zwei Fragen:
1. Unterstützt die Bibliothek beide Schreibweisen (sowohl i als auch j, einstellbar???)
2. Ist die Imaginäre Einheit als Präfix oder Postfix zu verwenden (einstellbar\automatisch erkannt?)
Inwiefern werden Operatoren überladen? (** für Potenzen?)
Warum die Trennung der statischen Funktionen von der Klasse ComplexNumber? Sollte man nicht sowohl als auch zulassen?
C#-Quelltext 1: 2:
| c3 = ComplexNumber.Multiply(c1, c2); c1.Multiply(c2); |
Oder ist ComplexNumber als immutable zu betrachten (was eine solche Verwendung ausschließen würde)?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 27.05.06 15:02
i = Mathematik- und j=Elektrotechnikschreibweise, das lernst du bei Studium
|
|
AXMD
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 27.05.06 15:44
MagicAndre1981 hat folgendes geschrieben: | i = Mathematik- und j=Elektrotechnikschreibweise, das lernst du bei Studium |
So ist es
BenBE hat folgendes geschrieben: | Zwei Fragen:
1. Unterstützt die Bibliothek beide Schreibweisen (sowohl i als auch j, einstellbar???) |
Jep. ComplexFormat.ImaginaryUnitSymbol einfach entsprechend setzen
BenBE hat folgendes geschrieben: | 2. Ist die Imaginäre Einheit als Präfix oder Postfix zu verwenden (einstellbar\automatisch erkannt?) |
Momentan ist nur die Präfix-Schreibweise (also z.B. 1+j2) erlaubt - werd ich noch einbauen.
BenBE hat folgendes geschrieben: | Inwiefern werden Operatoren überladen? (** für Potenzen?) |
** kenne ich nicht (diese Referenz hier übrigens auch nicht: msdn.microsoft.com/l...gusageguidelines.asp), ich habe stattdessen ^ überladen - werde ich bei Bedarf noch ändern. Überladen werden aktuell + - * / ^ ~ (vgl. Doku)
BenBE hat folgendes geschrieben: | Warum die Trennung der statischen Funktionen von der Klasse ComplexNumber? Sollte man nicht sowohl als auch zulassen?
C#-Quelltext 1: 2:
| c3 = ComplexNumber.Multiply(c1, c2); c1.Multiply(c2); |
Oder ist ComplexNumber als immutable zu betrachten (was eine solche Verwendung ausschließen würde)? |
Prinzipiell spricht nichts dagegen - werde ich, wenn ich Zeit habe, implementieren. Wobei das eine eher geringe Priorität hat - eben weil ja die Grundrechenarten durch Operatorüberladung direkt unterstützt werden.
AXMD
|
|
AndyB
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Sa 27.05.06 17:51
MagicAndre1981 hat folgendes geschrieben: | i = Mathematik- und j=Elektrotechnikschreibweise, das lernst du bei Studium |
Aber nicht beim Informatik/Mathematik Studium. Zumindest ist mir das "j" noch nie über den Weg gelaufen. Aber man lernt ja nie aus.
_________________ Ist Zeit wirklich Geld?
|
|
MagicAndre1981
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 27.05.06 20:24
|
|
AXMD
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 27.05.06 20:29
Oben eine neue (hoffentlich sinnvoller aufgeteilte) Version der Bibliothek - es existiert nun nur mehr eine einzige Klasse ComplexNumber, die alle Formatierungs- und sonstige Funktionen beinhaltet - sie ist allerdings (partial) auf 3 Dateien aufgeteilt. Die Add/Subtract/...-Methoden habe ich noch nicht implementiert, dafür alles andere, was gewünscht wurde.
Weitere Verbesserungsvorschläge sind herzlich willkommen
AXMD
|
|
AXMD
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Fr 02.06.06 21:23
Großes Update : der .Visualization-Namespace ist hinzugekommen und bietet umfangreiche Darstellungsmöglichkeiten für komplexe Zahlen. Beispiele und Demo siehe erster Post. Hier im Anhang die Doku und ein Screenshot der Demo (es sind ja nur 3 Anhänge pro Post erlaubt ).
AXMD
Einloggen, um Attachments anzusehen!
|
|
|