Browse Source

Merge branch 'master' of https://github.com/ldqk/Masuit.Tools

懒得勤快 5 years ago
parent
commit
df478013ba
3 changed files with 40 additions and 39 deletions
  1. 22 6
      Masuit.Tools/Maths/RadarChart.cs
  2. 12 14
      Masuit.Tools/Maths/RadarChartEngine.cs
  3. 6 19
      Test/Program.cs

+ 22 - 6
Masuit.Tools/Maths/RadarChart.cs

@@ -5,23 +5,39 @@ namespace Masuit.Tools.Maths
 {
     public class RadarChart
     {
-        public List<double> Data { get; set; }
-        public double StartAngle { get; set; } // 弧度
+        /// <summary>
+        /// 向量长度集合
+        /// </summary>
+        public List<double> Data { get; }
 
-        public RadarChart(List<double> data, double startAngle)
+        /// <summary>
+        /// 起始弧度
+        /// </summary>
+        public double StartAngle { get; } // 弧度
+
+        /// <summary>
+        /// 多边形
+        /// </summary>
+        /// <param name="data">向量长度集合</param>
+        /// <param name="startAngle">起始弧度</param>
+        public RadarChart(List<double> data, double startAngle = 0)
         {
             Data = new List<double>(data);
             StartAngle = startAngle;
         }
 
+        /// <summary>
+        /// 获取每个点的坐标
+        /// </summary>
+        /// <returns></returns>
         public List<Point2D> GetPoints()
         {
             int count = Data.Count;
             List<Point2D> result = new List<Point2D>();
-            for (int ii = 0; ii < count; ii++)
+            for (int i = 0; i < count; i++)
             {
-                double length = Data[ii];
-                double angle = StartAngle + Math.PI * 2 / count * ii;
+                double length = Data[i];
+                double angle = StartAngle + Math.PI * 2 / count * i;
                 double x = length * Math.Cos(angle);
                 double y = length * Math.Sin(angle);
                 result.Add(new Point2D(x, y));

+ 12 - 14
Masuit.Tools/Maths/RadarChartEngine.cs

@@ -18,11 +18,10 @@ namespace Masuit.Tools.Maths
         public static double ComputeArea(this List<Point2D> points)
         {
             double area = 0;
-            var iCount = points.Count;
-
-            for (var i = 0; i < iCount; i++)
+            var count = points.Count;
+            for (var i = 0; i < count; i++)
             {
-                area = area + (points[i].X * points[(i + 1) % iCount].Y - points[(i + 1) % iCount].X * points[i].Y);
+                area = area + (points[i].X * points[(i + 1) % count].Y - points[(i + 1) % count].X * points[i].Y);
             }
 
             return Math.Abs(0.5 * area);
@@ -48,12 +47,12 @@ namespace Masuit.Tools.Maths
             }
 
             int count = first.Data.Count;
-            List<Point2D> result = new List<Point2D>();
-            List<Point2D> firstPoints = first.GetPoints();
-            List<Point2D> secondPoints = second.GetPoints();
+            var result = new List<Point2D>();
+            var firstPoints = first.GetPoints();
+            var secondPoints = second.GetPoints();
             for (int i = 0; i < count; i++)
             {
-                Point2D tmp = (first.Data[i] > second.Data[i]) ? secondPoints[i] : firstPoints[i];
+                var tmp = (first.Data[i] > second.Data[i]) ? secondPoints[i] : firstPoints[i];
                 result.Add(tmp);
             }
 
@@ -73,12 +72,11 @@ namespace Masuit.Tools.Maths
 
         private static Point2D GetIntersect(Point2D lineFirstStart, Point2D lineFirstEnd, Point2D lineSecondStart, Point2D lineSecondEnd)
         {
-            Vector2D firstVec = lineFirstEnd - lineFirstStart;
-            Vector2D secondVec = lineSecondEnd - lineSecondStart;
-            double factor = firstVec.X * secondVec.Y - firstVec.Y * secondVec.X;
-            double dis = secondVec.X * (lineFirstStart.Y - lineSecondStart.Y) - secondVec.Y * (lineFirstStart.X - lineSecondStart.X);
-            double radio = dis / factor;
-
+            var firstVec = lineFirstEnd - lineFirstStart;
+            var secondVec = lineSecondEnd - lineSecondStart;
+            var factor = firstVec.X * secondVec.Y - firstVec.Y * secondVec.X;
+            var dis = secondVec.X * (lineFirstStart.Y - lineSecondStart.Y) - secondVec.Y * (lineFirstStart.X - lineSecondStart.X);
+            var radio = dis / factor;
             return lineFirstStart + firstVec * radio;
         }
     }

+ 6 - 19
Test/Program.cs

@@ -1,5 +1,6 @@
-using Masuit.Tools.Net;
+using Masuit.Tools.Maths;
 using System;
+using System.Collections.Generic;
 
 namespace Test
 {
@@ -7,24 +8,10 @@ namespace Test
     {
         static void Main(string[] args)
         {
-            var mtd = new MultiThreadDownloader("https://git.imweb.io/ldqk0/imgbed/raw/master/2020/01/05/sdcgssa1wlxc.jpg", Environment.GetEnvironmentVariable("temp"), "Y:\\1.jpg", 8);
-            mtd.Configure(req =>
-            {
-                req.Referer = "https://masuit.com";
-                req.Headers.Add("Origin", "https://baidu.com");
-            });
-            mtd.TotalProgressChanged += (sender, e) =>
-              {
-                  var downloader = sender as MultiThreadDownloader;
-                  Console.WriteLine("下载进度:" + downloader.TotalProgress + "%");
-                  Console.WriteLine("下载速度:" + downloader.TotalSpeedInBytes / 1024 / 1024 + "MBps");
-              };
-            mtd.FileMergeProgressChanged += (sender, e) =>
-              {
-                  Console.WriteLine("下载完成");
-              };
-            mtd.Start();//开始下载
-            Console.ReadKey();
+            var c1 = new RadarChart(new List<double>() { 2, 2, 2, 2 });
+            var c2 = new RadarChart(new List<double>() { 3, 3, 3, 3 });
+            var area = c1.ComputeIntersection(c2).ComputeArea();
+            Console.WriteLine(area);
         }
     }
 }