fix scan transformation for y° = 0
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"><SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &lt;PointCloudWeb.Server.Tests&gt; #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
||||
<Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&lt;PointCloudWeb.Server.Tests&gt;" />
|
||||
</SessionState></s:String>
|
||||
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=6e4a2479_002Dacc5_002D40ad_002Dab6f_002Dff921657a24c/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" Name="All tests from &lt;PointCloudWeb.Server.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
||||
<Project Location="C:\Users\timwu\source\repos\PointCloudWeb\PointCloudWeb.Server\PointCloudWeb.Server.Tests" Presentation="&lt;PointCloudWeb.Server.Tests&gt;" />
|
||||
</SessionState></s:String></wpf:ResourceDictionary>
|
||||
@@ -6,21 +6,22 @@ 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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user