71 lines
2.1 KiB
C#
71 lines
2.1 KiB
C#
using PointCloudWeb.Server.Models;
|
|
using PointCloudWeb.Server.Services;
|
|
using System;
|
|
using Xunit;
|
|
|
|
namespace PointCloudWeb.Server.Tests.Services
|
|
{
|
|
public class ScanConverterServiceTest
|
|
{
|
|
|
|
[Theory]
|
|
[InlineData(1, 1, 1)]
|
|
[InlineData(2, 2, 2)]
|
|
[InlineData(2, 1, 1)]
|
|
[InlineData(1, 2, 1)]
|
|
[InlineData(1, 1, 2)]
|
|
[InlineData(10, 15, 32)]
|
|
[InlineData(5, 12, 7)]
|
|
|
|
[InlineData(-1, 1, 1)]
|
|
[InlineData(1, -1, 1)]
|
|
[InlineData(-1, -1, 1)]
|
|
[InlineData(-5, 12, 7)]
|
|
[InlineData(-5, -12, 7)]
|
|
[InlineData(-22, 13, 11)]
|
|
|
|
//[InlineData(1, 1, -1)]
|
|
//[InlineData(-1, 1, -1)]
|
|
//[InlineData(1, -1, -1)]
|
|
//[InlineData(5, 12, -7)]
|
|
//[InlineData(-5, 12, -7)]
|
|
//[InlineData(-5, -12, -7)]
|
|
public static void ScanConverterTest(int x, int y, int z)
|
|
{
|
|
var scan = new ScanDataPoint
|
|
{
|
|
RAX = Math.Acos(y / Math.Sqrt(Math.Pow(y, 2) + Math.Pow(z, 2))),
|
|
RAY = Math.Acos(x / Math.Sqrt(Math.Pow(z, 2) + Math.Pow(x, 2))),
|
|
DistanceMM = (float)Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2))
|
|
};
|
|
|
|
//from rad to degree
|
|
scan.RAX = scan.RAX * 180 / Math.PI;
|
|
scan.RAY = scan.RAY * 180 / Math.PI;
|
|
var expected = new Point(x, y, z);
|
|
|
|
var service = new ScanConverterService();
|
|
var point = service.Transform(scan);
|
|
Assert.Equal(expected, point);
|
|
|
|
//if (scan.RAX >= 0 && scan.RAX < 90)
|
|
// scan.RAY = 360 - scan.RAY;
|
|
//else if (scan.RAX >= 90 && scan.RAX < 180)
|
|
// scan.RAY = 180 - scan.RAY;
|
|
|
|
//if (scan.RAX < 270 && scan.RAY >= 270 && scan.RAY < 360)
|
|
// scan.RAX = 360 - scan.RAX;
|
|
//else if (angle >= 180 && angle < 270)
|
|
//{
|
|
// sin *= -1;
|
|
// cos *= -1;
|
|
//}
|
|
//else if (angle >= 270 && angle < 360)
|
|
//{
|
|
// sin *= -1;
|
|
//}
|
|
|
|
}
|
|
}
|
|
}
|