2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-12-18 09:50:25 +00:00
This commit is contained in:
2023-03-28 00:59:26 +03:00
parent 5a9abe4084
commit 1c440adf43
8 changed files with 255 additions and 14 deletions

View File

@@ -28,19 +28,49 @@
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.pbDraw = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pbDraw)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(468, 409);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Step";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// pbDraw
//
this.pbDraw.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pbDraw.Location = new System.Drawing.Point(36, 40);
this.pbDraw.Name = "pbDraw";
this.pbDraw.Size = new System.Drawing.Size(639, 345);
this.pbDraw.TabIndex = 1;
this.pbDraw.TabStop = false;
this.pbDraw.Paint += new System.Windows.Forms.PaintEventHandler(this.pbDraw_Paint);
//
// FGraph
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(838, 494);
this.ClientSize = new System.Drawing.Size(729, 459);
this.Controls.Add(this.pbDraw);
this.Controls.Add(this.button1);
this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.Name = "FGraph";
this.Text = "FGraph";
((System.ComponentModel.ISupportInitialize)(this.pbDraw)).EndInit();
this.ResumeLayout(false);
}
#endregion
private Button button1;
private PictureBox pbDraw;
}
}

View File

@@ -1,4 +1,5 @@
using System;
using Esiur.Analysis.Graph;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -12,9 +13,94 @@ namespace Esiur.Analysis.Test
{
public partial class FGraph : Form
{
DirectedGraph<decimal> graph;
int step = 0;
public FGraph()
{
graph = new DirectedGraph<decimal>();
var n1 = graph.AddNode(1, "1", 80, 120);
var n2 = graph.AddNode(2, "2", 300, 120);
graph.Link(n1, n2, (decimal)0.5, "1->2");
graph.Link(n1, n1, (decimal)0.5, "1->1");
graph.Link(n2, n1, (decimal)0.2, "2->1");
graph.Link(n2, n2, (decimal)0.8, "2->2");
graph.Build();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
graph.Step();
step++;
pbDraw.Refresh();
}
private void pbDraw_Paint(object sender, PaintEventArgs e)
{
var pen = new Pen(Brushes.Red, 4);
var g = e.Graphics;
g.FillRectangle(Brushes.White, 0, 0, pbDraw.Width, pbDraw.Height);
// update label
foreach (var edge in graph.Edges)
{
DrawArcBetweenTwoPoints(g, pen, new PointF(edge.SourceNode.X, edge.SourceNode.Y),
new PointF(edge.DestinationNode.X, edge.DestinationNode.Y), edge.Label + " " + Math.Round( edge.Weight, 4));
}
foreach (var node in graph.Nodes)
{
g.FillEllipse(Brushes.LightGreen, node.X - 30, node.Y - 30, 60, 60);
g.DrawString(node.Label, new Font("Arial", 26), Brushes.Blue, node.X - 15, node.Y - 20);
}
g.DrawString("Step " + step, new Font("Arial", 26), Brushes.Orange, new PointF(20, pbDraw.Height - 50));
g.Flush();
}
public void DrawArcBetweenTwoPoints(Graphics g, Pen pen, PointF a, PointF b, string label)
{
if (a.X == b.X && a.Y == b.Y)
{
var c = new PointF(a.X, a.Y - 60);
// draw
g.DrawString(label, new Font("Arial", 14), Brushes.Black, new PointF(c.X, c.Y - 25));
g.DrawCurve(pen, new PointF[] { a, new PointF(a.X - 30, a.Y - 30), c, new PointF(a.X + 30, a.Y - 30), a });
}
else
{
if (b.X > a.X)
{
var c = new PointF(a.X + ((b.X - a.X) / 2), a.Y - 20);
g.DrawCurve(pen, new PointF[] { a, c, b });
g.DrawString(label, new Font("Arial", 14), Brushes.Black, new PointF( c.X - 30, c.Y - 25));
}
else
{
var c = new PointF(b.X + ((a.X - b.X) / 2), b.Y + 20);
g.DrawCurve(pen, new PointF[] { b, c, a });
g.DrawString(label, new Font("Arial", 14), Brushes.Black, new PointF(c.X - 30, c.Y + 5));
}
}
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Net.Sockets;
using System.Text;
using Esiur.Analysis.Coding;
using Esiur.Analysis.DSP;
using Esiur.Analysis.Graph;
using Esiur.Analysis.Signals;
/*
@@ -31,6 +32,7 @@ SOFTWARE.
using Esiur.Analysis.Signals.Codes;
using Esiur.Data;
using Esiur.Resource;
using ScottPlot.Statistics.Interpolation;
namespace Esiur.Analysis.Test
{
@@ -45,6 +47,28 @@ namespace Esiur.Analysis.Test
static void Main()
{
var graph = new DirectedGraph<double>();
var n1 = graph.AddNode(1, "1", 10, 10);
var n2 = graph.AddNode(2, "2", 20, 10);
graph.Link(n1, n2, 0.5, "1->2");
graph.Link(n1, n1, 0.5, "1->1");
graph.Link(n2, n1, 0.2, "2->1");
graph.Link(n2, n2, 0.8, "2->2");
var matrix = new Matrix<double>(new double[,] { { 0.5, 0.5 }, { 0.2, 0.8 } });
var m = matrix;
for(var i = 0; i < 3; i++)
{
m = m * m;
Console.WriteLine(m);
}
var msg = Encoding.ASCII.GetBytes("A_DEAD_DAD_CEDED_A_BAD_BABE_A_BEADED_ABACA_BED").Select(x => CodeWord<Base2>.FromByte(x)).ToArray();// <Base2>());
// convert msg to codewords
@@ -78,7 +102,7 @@ namespace Esiur.Analysis.Test
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new FSoft());
Application.Run(new FGraph());
}
}
}