fix scan transformation for y° = 0

This commit is contained in:
Tim Wundenberg
2021-08-01 20:05:15 +02:00
parent 419a468dc5
commit ab4f98f76c
6 changed files with 56 additions and 28 deletions

View File

@@ -12,38 +12,48 @@ namespace PointCloudWeb.Server.ScanConverter
{ {
private static void Main() private static void Main()
{ {
var scanPoints = File.ReadAllLines("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-edited-scan.csv") var scanPoints = File.ReadAllLines("C:/Users/timwu/Desktop/Scans/0yGrad-scan-org.csv")
.Select(v => ScanDataPointFromCsv(v)) .Select(v => ScanDataPointFromCsv(v))
.Where(scan => scan.DistanceMM > 0) .Where(scan => scan.DistanceMM > 0)
.ToList(); .ToList();
var result = new List<Point>(); var result = new List<Point>();
var converter = new ScanConverterService();
foreach (var scan in scanPoints) foreach (var scan in scanPoints)
{ {
result.Add(converter.Transform(scan)); result.Add(ScanConverterService.Transform(scan));
//Console.WriteLine(result.Count + ":: " + scan.ToString() + " => " + result[result.Count - 1].ToString()); //Console.WriteLine(result.Count + ":: " + scan.ToString() + " => " + result[result.Count - 1].ToString());
} }
result.RemoveAll(point => point.X == 0 && point.Y == 0 & point.Z == 0); result.RemoveAll(point => point.X == 0 && point.Y == 0 & point.Z == 0);
string csv = String.Join("\n", result.Select(point => point.X + ", " + point.Y + ", " + point.Z).ToArray()); var csv = "x,y,z\n" + string.Join("\n", result.Select(point => point.X + ", " + point.Y + ", " + point.Z).ToArray());
File.WriteAllText("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-pc.csv", csv); File.WriteAllText("C:\\Users\\timwu\\Desktop\\Scans\\0yGrad-pc-org.csv", csv);
Console.WriteLine("Convert finished"); Console.WriteLine("Convert finished");
Console.ReadLine(); // Console.ReadLine();
} }
private static ScanDataPoint ScanDataPointFromCsv(string csvLine) private static ScanDataPoint ScanDataPointFromCsv(string csvLine)
{ {
string[] values = csvLine.Split(','); string[] values = csvLine.Split(',');
return new ScanDataPoint( var scan = new ScanDataPoint(
ray: Convert.ToDouble(values[0], CultureInfo.InvariantCulture), ray: Convert.ToDouble(values[0], CultureInfo.InvariantCulture),
rax: Convert.ToDouble(values[1], CultureInfo.InvariantCulture), rax: Convert.ToDouble(values[1], CultureInfo.InvariantCulture),
distanceMM: Convert.ToInt32(values[2], CultureInfo.InvariantCulture) distanceMM: (int)Convert.ToDouble(values[2], CultureInfo.InvariantCulture)
); );
//scan.RAX += 90;
// scan.RAY += 90;
//scan.RAX %= 360;
// scan.RAY %= 360;
return scan;
if (scan.RAX == 1) return scan;
return new ScanDataPoint();
} }
} }
} }

View File

@@ -64,7 +64,7 @@ namespace PointCloudWeb.Server.Tests.Services
var expected = new Point(x, y, z); var expected = new Point(x, y, z);
var service = new ScanConverterService(); var service = new ScanConverterService();
var point = service.Transform(scan); var point = ScanConverterService.Transform(scan);
Assert.Equal(expected, point); Assert.Equal(expected, point);
} }
} }

View File

@@ -1,3 +1,11 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String></wpf:ResourceDictionary> <s:String x:Key="/Default/CodeInspection/Highlighting/SweaWarningsMode/@EntryValue">ShowAndRun</s:String>
<s:String x:Key="/Default/CodeInspection/PencilsConfiguration/ActualSeverity/@EntryValue">INFO</s:String>
<s:Boolean x:Key="/Default/Environment/InlayHints/GeneralInlayHintsOptions/EnableInlayHints/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=5420edfd_002D53ed_002D4360_002D91dc_002D622a0704440e/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt; #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&amp;lt;PointCloudWeb.Server.Tests&amp;gt;" /&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=6e4a2479_002Dacc5_002D40ad_002Dab6f_002Dff921657a24c/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="All tests from &amp;lt;PointCloudWeb.Server.Tests&amp;gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&amp;lt;PointCloudWeb.Server.Tests&amp;gt;" /&gt;&#xD;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -6,21 +6,22 @@ namespace PointCloudWeb.Server.Services
{ {
public class ScanConverterService public class ScanConverterService
{ {
public Point Transform(ScanDataPoint scan) public static Point Transform(ScanDataPoint scan)
{ {
if (scan.RAX >= 180 || scan.RAY >= 180) // if (scan.RAX >= 90 || scan.RAY >= 90)
return new Point(0, 0, 0); // return new Point(0, 0, 0);
var degreeXa = scan.RAX; var degreeXa = scan.RAX;
var degreeYa = scan.RAY; var degreeYa = scan.RAY;
//if (degreeXA > 270 && degreeYA > 270) var factorY = 1;
//{ var factorZ = 1;
// degreeXA -= 270; if (180 <= degreeXa && degreeXa <= 360)
// degreeYA -= 270; {
// factorZ = -1; factorY = -1;
//} factorZ = -1;
}
var degreeXb = 180 - 90 - degreeXa; var degreeXb = 180 - 90 - degreeXa;
var degreeYb = 180 - 90 - degreeYa; var degreeYb = 180 - 90 - degreeYa;
@@ -34,6 +35,17 @@ namespace PointCloudWeb.Server.Services
var sinYa = Math.Sin(radYa); var sinYa = Math.Sin(radYa);
var sinYb = Math.Sin(radYb); var sinYb = Math.Sin(radYb);
if (sinXa == 0)
{
sinXa = 1;
sinXb = 0;
}
if (sinYa == 0)
{
sinYa = 1;
sinYb = 0;
}
var z = Math.Sqrt( var z = Math.Sqrt(
Math.Pow( Math.Pow(
Math.Pow(sinXb, 2) / Math.Pow(sinXa, 2) Math.Pow(sinXb, 2) / Math.Pow(sinXa, 2)
@@ -46,8 +58,8 @@ namespace PointCloudWeb.Server.Services
var p = new Point() var p = new Point()
{ {
X = NumericUtils.Round(z * sinYb / sinYa), X = NumericUtils.Round(z * sinYb / sinYa),
Y = NumericUtils.Round(z * sinXb / sinXa), Y = factorY * NumericUtils.Round(z * sinXb / sinXa),
Z = NumericUtils.Round(z) Z = factorZ * NumericUtils.Round(z)
}; };
return p; return p;

View File

@@ -7,12 +7,10 @@ namespace PointCloudWeb.Server.Services
public class ScanDataService public class ScanDataService
{ {
private readonly PointCloudService _pointCloudService; private readonly PointCloudService _pointCloudService;
private readonly ScanConverterService _scanConverterService;
public ScanDataService(PointCloudService pointCloudService, ScanConverterService scanConverterService) public ScanDataService(PointCloudService pointCloudService)
{ {
_pointCloudService = pointCloudService; _pointCloudService = pointCloudService;
_scanConverterService = scanConverterService;
} }
private IList<Point> ConvertToPoints(ScanDataList scanData) private IList<Point> ConvertToPoints(ScanDataList scanData)
@@ -21,7 +19,7 @@ namespace PointCloudWeb.Server.Services
foreach (var scan in scanData.ScanPoints) foreach (var scan in scanData.ScanPoints)
{ {
list.Add(_scanConverterService.Transform(scan)); list.Add(ScanConverterService.Transform(scan));
} }
return list; return list;

View File

@@ -49,10 +49,10 @@ export default {
axios axios
.put(globals.API_URL + 'pointcloudinfo', pointCloudInfo) .put(globals.API_URL + 'pointcloudinfo', pointCloudInfo)
.then(response => { .then(response => {
setTimeout(() => { setTimeout(() => {
commit('UPDATE_PC', { action: "update", data: response.data }); commit('UPDATE_PC', { action: "update", data: response.data });
commit('SET_LOADING', false); commit('SET_LOADING', false);
}, 80)(); }, 80);
}).catch(() => { }).catch(() => {
commit('SET_LOADING', false) commit('SET_LOADING', false)
}) })