Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2019, 12:16   #1
german1987
Новичок
Джуниор
 
Регистрация: 05.11.2019
Сообщений: 1
По умолчанию Расскажите, что здесь происходит в коде?

Расскажите, что здесь происходит в коде? Хотя бы в целом.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;

namespace GraphsMinCoverage.Models.GraphLab
{
    public class RoundGraphVisualizer
    {
        public static void Visualize(Canvas canvas, GraphData graph, int vertexRadius = 15)
        {
            Point center = GetCenter(canvas);
            int distY = (int)(canvas.ActualHeight / 2 - vertexRadius * 5);
            int distX = (int)(canvas.ActualWidth / 2 - vertexRadius * 6);
            int verticesCount = graph.Vertices.Count;

            double angle = 0;
            double deltaAngle = 360 / verticesCount;

            double x, y;
            for (int i = 0; i < verticesCount; i++)
            {
                x = center.X - distX * Math.Sin(angle * Math.PI / 180);
                y = center.Y - distY * Math.Cos(angle * Math.PI / 180);
                graph.Vertices[i].Position = new Point(x, y);
                angle += deltaAngle;
            }

            foreach (var edge in graph.Edges)
            {
                Line line = new Line();
                line.Stroke = Brushes.Black;
                line.Fill = Brushes.Black;
                line.X1 = edge.Source.Position.X;
                line.Y1 = edge.Source.Position.Y;
                line.X2 = edge.Target.Position.X;
                line.Y2 = edge.Target.Position.Y;
                canvas.Children.Add(line);

                //TextBlock textBlock = new TextBlock();
                //textBlock.Text = graph.WeightMatrix[edge.Source.ID - 1, edge.Target.ID - 1].ToString();
                //textBlock.FontSize = 15;
                //Canvas.SetLeft(textBlock, (line.X1 + line.X2) / 2);
                //Canvas.SetTop(textBlock, (line.Y1 + line.Y2) / 2);
                //canvas.Children.Add(textBlock);
            }

            foreach (var vertex in graph.Vertices)
            {
                DrawVertex(canvas, vertex, Brushes.White);
            }
        }

        public static void DrawVertex(Canvas canvas, VertexData vertex, SolidColorBrush color)
        {
            vertex.Color = color;

            Ellipse ellipse = new Ellipse();
            ellipse.Stroke = Brushes.Black;
            ellipse.Fill = color;
            ellipse.SetValue(Canvas.TopProperty, vertex.Position.Y - 15);
            ellipse.SetValue(Canvas.LeftProperty, vertex.Position.X - 15);
            ellipse.Height = 15 * 2;
            ellipse.Width = 15 * 2;
            canvas.Children.Add(ellipse);

            TextBlock textBlock = new TextBlock();
            textBlock.Text = vertex.Text;
            Canvas.SetLeft(textBlock, vertex.Position.X - 15 / 2);
            Canvas.SetTop(textBlock, vertex.Position.Y - 15 / 2);
            canvas.Children.Add(textBlock);
        }

        public static void PaintGraph(Canvas canvas, GraphData graph)
        {
            List<SolidColorBrush> brushes = new List<SolidColorBrush>();
            foreach (var vertex in graph.Vertices)
            {
                SolidColorBrush color = null;
                bool flag = false;
                foreach (var brush in brushes)
                {
                    int count = vertex.IncidentEdges.Where(e => e.OtherEdge(vertex).Color.Equals(brush)).Count();
                    Thread.Sleep(10);
                    if (count == 0)
                    {
                        color = brush;
                        flag = true;
                        break;
                    }
                }
                if (!flag)
                {
                    do
                    {
                        color = PickBrush();
                    } while (brushes.Contains(color));
                }
                brushes.Add(color);
                vertex.Color = color;
                DrawVertex(canvas, vertex, color);
            }

          var brushes1 = brushes.ToList().Distinct();
          System.Windows.MessageBox.Show($"Number of colors: {brushes1.Count()}");
        }

      public void ColorsCount(GraphData graph)
      {
        var color = new SolidColorBrush();

        foreach (var vertex in graph.Vertices)
        {

        }
      }

      //public static void PaintGraph1(Canvas canvas, GraphData graph)
    //{
    //  var colors = new List<SolidColorBrush>();
    //  var notPainted = graph.Vertices.ToList();
    //  var painted = new List<VertexData>();

    //  //while (notPainted.Count != 0)
    //  //{
    //    foreach (var vertex in notPainted)
    //    {
    //      if (vertex.Color.Color == Colors.White)
    //      {
    //        var disconnectedVertices = notPainted.Except(vertex.GetNearbyVertices()).ToList();
    //        foreach (var disVertex in disconnectedVertices)
    //        {
    //          SolidColorBrush color = null;

    //          if (!painted.Contains(disVertex))
    //          {
    //            painted.Add(disVertex);
    //          }


    //          foreach (var vert in painted)
    //            {

    //              DrawVertex(canvas, vert, color);
    //            }
    //          }
    //        }
    //      }
    //    }
    //  //}

    //}

    private static Point GetCenter(Canvas canvas)
        {
            Point center = new Point();
            center.X = canvas.ActualWidth / 2;
            center.Y = canvas.ActualHeight / 2;

            return center;
        }

        private static SolidColorBrush PickBrush()
        {
            SolidColorBrush result = Brushes.Transparent;
            Random rnd = new Random();
            Type brushesType = typeof(Brushes);

            PropertyInfo[] properties = brushesType.GetProperties();

            int random = rnd.Next(properties.Length);
            result = (SolidColorBrush)properties[random].GetValue(null, null);

            return result;
        }
    }
}
german1987 вне форума Ответить с цитированием
Старый 05.11.2019, 12:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Рисование графа
p51x вне форума Ответить с цитированием
Старый 05.11.2019, 12:49   #3
lindas
Новичок
Джуниор
 
Регистрация: 05.11.2019
Сообщений: 2
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Рисование графа
а подробнее можно?
lindas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Прокомментируйте пожалуйста что здесь происходит (выделила строчки) Мария19043 Помощь студентам 1 01.04.2019 15:57
Помогите понять что здесь происходит.... C++ ARLy_19 Win Api 2 27.12.2017 16:22
Помогите понять что здесь происходит.... ARLy_19 Помощь студентам 0 27.12.2017 12:00
Объясните что здесь происходит, или комментарии понятные weqw121 Помощь студентам 1 15.10.2017 15:00
Что происходит в коде? Kirill3211 C# (си шарп) 5 12.12.2014 16:22