Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Complex Library (https://www.delphipraxis.net/70689-complex-library.html)

Dust Signs 2. Jun 2006 20:35


Complex Library
 
Liste der Anhänge anzeigen (Anzahl: 4)
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:

Code:
using DSComplexLib.Calculation;

ComplexNumber c1 = ComplexNumber.j; //j
ComplexNumber c2 = new ComplexNumber(1, 2); //1+2j

ComplexNumber c = (c1 / c2).Sqrt();
c.SetAngleRestriction(AngleRestriction.ar0To2Pi); //Winkel soll zwischen 0 und 2Pi liegen

label1.Text = c.ToCompString(); //In Komponenten-Form ausgeben
label2.Text = c.ToPolarString(false); //In Polar-Form ausgeben
Und hier ein Beispiel, wie man zwei Strings in eine komplexe Zahl umwandeln und addieren kann:

Code:
using DSComplexLib.Calculation;

String s1 = "1+j2"; //1+2j
String s2 = "1*e^j90°"; //j

ComplexNumber c = ComplexNumber.Parse(s1) + ComplexNumber.Parse(s2);
label1.Text = c.ToCompString(); //In Komponenten-Form ausgeben
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.

Code:
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); //Enable Antialiasing

            Pen AuxiliaryPen = new Pen(Color.LightGray, 1);
            AuxiliaryPen.DashStyle = DashStyle.Dot; //Make auxiliary raster lines gray dotted
            cPlane.SetAuxiliaryRasterPen(AuxiliaryPen);
            cPlane.AddCircle(Circle.UnitCircle); //Show unit circle
            cPlane.AddCircle(new Circle(Pens.Black, Math.Sqrt(2))); //Show circle with radius Sqrt(2)

            ComplexPhasorGroup g1 = new ComplexPhasorGroup("Group 1", false); //Create phasor group
            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)); //Add phasor
            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); //Add phasor group to complex plane

            ComplexPhasorGroup g2 = new ComplexPhasorGroup("Group 2", true); //Create phasor group where phasors are added graphically
            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); //Redraw
        }

        private void Form1_Resize(object sender, EventArgs e)
        {
            Form1_Paint(sender, null); //Redraw when size of window changes
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (((MouseEventArgs)e).Button == MouseButtons.Left) //When moving mouse and left button is pressed...
                cPlane.StretchSelectedPhasor(((MouseEventArgs)e).Location); //...stretch currently selected phasor
        }

        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

Dust Signs

Dust Signs 2. Jun 2006 20:36

Re: Complex Library
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hier noch die restlichen Anhänge ;)

Dust Signs


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz