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()
{
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))
.Where(scan => scan.DistanceMM > 0)
.ToList();
var result = new List<Point>();
var converter = new ScanConverterService();
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());
}
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.ReadLine();
// Console.ReadLine();
}
private static ScanDataPoint ScanDataPointFromCsv(string csvLine)
{
string[] values = csvLine.Split(',');
return new ScanDataPoint(
var scan = new ScanDataPoint(
ray: Convert.ToDouble(values[0], 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 service = new ScanConverterService();
var point = service.Transform(scan);
var point = ScanConverterService.Transform(scan);
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">
<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,20 +6,21 @@ namespace PointCloudWeb.Server.Services
{
public class ScanConverterService
{
public Point Transform(ScanDataPoint scan)
public static Point Transform(ScanDataPoint scan)
{
if (scan.RAX >= 180 || scan.RAY >= 180)
return new Point(0, 0, 0);
// if (scan.RAX >= 90 || scan.RAY >= 90)
// return new Point(0, 0, 0);
var degreeXa = scan.RAX;
var degreeYa = scan.RAY;
//if (degreeXA > 270 && degreeYA > 270)
//{
// degreeXA -= 270;
// degreeYA -= 270;
// factorZ = -1;
//}
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;
@@ -34,6 +35,17 @@ namespace PointCloudWeb.Server.Services
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)
@@ -46,8 +58,8 @@ namespace PointCloudWeb.Server.Services
var p = new Point()
{
X = NumericUtils.Round(z * sinYb / sinYa),
Y = NumericUtils.Round(z * sinXb / sinXa),
Z = NumericUtils.Round(z)
Y = factorY * NumericUtils.Round(z * sinXb / sinXa),
Z = factorZ * NumericUtils.Round(z)
};
return p;

View File

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

View File

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