PositionCalculator.cs 908 B

12345678910111213141516171819202122232425262728
  1. using Assets.StreetLight.Poco;
  2. using MathNet.Numerics.LinearAlgebra;
  3. using MathNet.Numerics.LinearAlgebra.Double;
  4. using UnityEngine;
  5. namespace Assets.StreetLight.Scripts
  6. {
  7. public class PositionCalculator
  8. {
  9. private readonly Matrix<double> homography;
  10. public PositionCalculator(double[,] homographyArray)
  11. {
  12. homography = DenseMatrix.OfArray(homographyArray);
  13. }
  14. public Vector3 WorldPositionToUnityPosition(Vector3 worldPosition)
  15. {
  16. var homogeneousWorldPosition = DenseVector.OfArray(new double[] { worldPosition.x, worldPosition.z, 1 });
  17. var output = homography * homogeneousWorldPosition;
  18. var scaledOutput = output / output[2];
  19. var resultVector = new Vector3((float)scaledOutput[0], 0, (float)scaledOutput[1]);
  20. return resultVector;
  21. }
  22. }
  23. }