Algorithm.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace BaseLibRWFile
  7. {
  8. public class Algorithm
  9. {
  10. public static double[,] CalcultePos(double[,] dMarkPos,double[,] dDrawingMarkPos,int iPointCount,double[,] dDrawingPointPos)
  11. {
  12. double[,] dResultPos = new double[iPointCount, 2];
  13. double P1X, P1Y, P2X, P2Y, P1dX, P1dY, P2dX, P2dY;
  14. P1X = dMarkPos[0, 0];
  15. P1Y = dMarkPos[0, 1];
  16. P2X = dMarkPos[1, 0];
  17. P2Y = dMarkPos[1, 1];
  18. P1dX = Convert.ToDouble(dDrawingMarkPos[0, 0]);
  19. P1dY = Convert.ToDouble(dDrawingMarkPos[0, 1]);
  20. P2dX = Convert.ToDouble(dDrawingMarkPos[1, 0]);
  21. P2dY = Convert.ToDouble(dDrawingMarkPos[1, 1]);
  22. double A01 = ((P2X - P1X) / (P2dX - P1dX) - (P2Y - P1Y) / (P2dY - P1dY)) / ((P2dY - P1dY) / (P2dX - P1dX) + (P2dX - P1dX) / (P2dY - P1dY));
  23. double A00 = ((P2X - P1X) - A01 * (P2dY - P1dY)) / (P2dX - P1dX);
  24. double B01 = P1X - (A00 * P1dX + A01 * P1dY);
  25. double B02 = P1Y - (-A01 * P1dX + A00 * P1dY);
  26. for (int i = 0; i < iPointCount + 1; i++)
  27. {
  28. dResultPos[i, 0] = A00 * Convert.ToDouble(dDrawingPointPos[i, 0]) + A01 * Convert.ToDouble(dDrawingPointPos[i, 1]) + B01;
  29. dResultPos[i, 1] = -A01 * Convert.ToDouble(dDrawingPointPos[i, 0]) + A00 * Convert.ToDouble(dDrawingPointPos[i, 1]) + B02;
  30. }
  31. return dResultPos;
  32. }
  33. }
  34. }