From f3a0bac05e2db817b55eec99e81b0399291280b6 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Tue, 17 Aug 2021 18:14:03 +0200 Subject: [PATCH] new ScanConverter method --- .../Program.cs | 3 - .../Services/ScanConverterServiceTest.cs | 1 - .../Services/PointCloudService.cs | 5 +- .../Services/ScanConverterService.cs | 72 ++----------------- .../PointCloudWeb.Server/Utils/EthTestData.cs | 2 - 5 files changed, 8 insertions(+), 75 deletions(-) diff --git a/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs b/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs index d956cdc..0d6b958 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server.ScanConverter/Program.cs @@ -48,9 +48,6 @@ namespace PointCloudWeb.Server.ScanConverter //scan.RAY = (scan.RAY + 90) % 360; return scan; - if (scan.RAX == 1) return scan; - - return new ScanDataPoint(); } } } \ No newline at end of file diff --git a/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs b/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs index 06bac3f..3c9d24f 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server.Tests/Services/ScanConverterServiceTest.cs @@ -63,7 +63,6 @@ namespace PointCloudWeb.Server.Tests.Services var expected = new Point(x, y, z); - var service = new ScanConverterService(); var point = ScanConverterService.Transform(scan); Assert.Equal(expected, point); } diff --git a/PointCloudWeb.Server/PointCloudWeb.Server/Services/PointCloudService.cs b/PointCloudWeb.Server/PointCloudWeb.Server/Services/PointCloudService.cs index 75f3a75..35a1494 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server/Services/PointCloudService.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server/Services/PointCloudService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using PointCloudWeb.Server.Models; -using PointCloudWeb.Server.Utils; namespace PointCloudWeb.Server.Services { @@ -38,7 +37,7 @@ namespace PointCloudWeb.Server.Services private void InitSampleData() { - EthTestData.CreateData(this); + //EthTestData.CreateData(this); } private void RaiseIfNotExists(Guid id) @@ -61,7 +60,7 @@ namespace PointCloudWeb.Server.Services public PointCloud AddPointCloud(Guid? id = null) { - if (id != null && _pointClouds.Contains(id)) + if (_pointClouds.Contains(id)) throw new ArgumentOutOfRangeException($"Add of existing id \"{id}\" not possible!"); var pc = new PointCloud(id ?? Guid.NewGuid(), $"Scan #{_pointClouds.Count + 1}"); diff --git a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs index dea50ed..4552ead 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server/Services/ScanConverterService.cs @@ -1,6 +1,5 @@ using System; using PointCloudWeb.Server.Models; -using PointCloudWeb.Server.Utils; namespace PointCloudWeb.Server.Services { @@ -8,73 +7,14 @@ namespace PointCloudWeb.Server.Services { public static Point Transform(ScanDataPoint scan) { - // if (scan.RAX >= 90 || scan.RAY >= 90) - // return new Point(0, 0, 0); + var alpha = scan.RAX * Math.PI / 180; + var beta = scan.RAY * Math.PI / 180; - var degreeXa = (scan.RAX) % 360; - var degreeYa = scan.RAY; - - var factorY = 1; - var factorZ = 1; - if (180 <= degreeXa && degreeXa <= 360) - { - factorY = -1; - factorZ = -1; - } - - var degreeXb = 180 - 90 - degreeXa; - var degreeYb = 180 - 90 - degreeYa; - - var radXa = degreeXa * Math.PI / 180; - var radXb = degreeXb * Math.PI / 180; - var radYa = degreeYa * Math.PI / 180; - var radYb = degreeYb * Math.PI / 180; - - var sinXa = Math.Sin(radXa); - var sinXb = Math.Sin(radXb); - var sinYa = Math.Sin(radYa); - var sinYb = Math.Sin(radYb); - - if (sinXa == 0) - { - sinXa = 1; - sinXb = 0; - } - - if (sinYa == 0) - { - sinYa = 1; - sinYb = 0; - } - - var z = Math.Sqrt( - Math.Pow( - Math.Pow(sinXb, 2) / Math.Pow(sinXa, 2) - + Math.Pow(sinYb, 2) / Math.Pow(sinYa, 2) - + 1 - , -1) - * Math.Pow(scan.DistanceMM, 2) + var p = new Point( + y: (int)(scan.DistanceMM * Math.Sin(alpha)), + x: (int)(scan.DistanceMM * Math.Cos(beta) * Math.Cos(alpha)), + z: (int)(scan.DistanceMM * Math.Sin(beta) * Math.Cos(alpha)) ); - - var p = new Point - { - X = NumericUtils.Round(z * sinYb / sinYa), - Y = factorY * NumericUtils.Round(z * sinXb / sinXa), - Z = factorZ * NumericUtils.Round(z) - }; - //return p; - - //https://stackoverflow.com/questions/52781607/3d-point-from-two-angles-and-a-distance - var beta = radYa; - var alpha = radXa; - - p = new Point - { - Y = (int)(scan.DistanceMM * Math.Sin(alpha)), - X = (int)(scan.DistanceMM * Math.Cos(beta) * Math.Cos(alpha)), - Z = (int)(scan.DistanceMM * Math.Sin(beta) * Math.Cos(alpha)) - }; - return p; } } diff --git a/PointCloudWeb.Server/PointCloudWeb.Server/Utils/EthTestData.cs b/PointCloudWeb.Server/PointCloudWeb.Server/Utils/EthTestData.cs index 390ea1a..eefb3d1 100644 --- a/PointCloudWeb.Server/PointCloudWeb.Server/Utils/EthTestData.cs +++ b/PointCloudWeb.Server/PointCloudWeb.Server/Utils/EthTestData.cs @@ -38,12 +38,10 @@ namespace PointCloudWeb.Server.Utils public static void CreateData(PointCloudService pointCloudService) { var pc = pointCloudService.AddPointCloud(); - pc.Name = "Scan 1"; LoadPointCloudFromEthFile(pc, "ETH-Data/Hokuyo_0.csv"); pointCloudService.PointCloudCompleted(pc.Id); pc = pointCloudService.AddPointCloud(); - pc.Name = "Scan 2"; LoadPointCloudFromEthFile(pc, "ETH-Data/Hokuyo_1.csv"); pointCloudService.PointCloudCompleted(pc.Id); }