Guest User

Untitled

a guest
Dec 13th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. v2.x = -v1.y;
  2. v2.y = v1.x;
  3.  
  4. v2.x = v1.y;
  5. v2.y = -v1.x;
  6.  
  7. //0. Длина катета АВ (ab):
  8. // ab = Sqrt((xa_− xb_)^2+(ya_− yb_)^2)
  9. //1. Вектор AB = B - A, покоординатно. Делим обе координаты на длину, получаем единичный вектор (v1):
  10. // v1.x = (B.x - A.x) / ab === v1x = (xb_ - xa_) / ab
  11. // v1.y = (B.y - A.y) / ab === v1y = (yb_ - ya_) / ab
  12. //2. Поворачиваем вектор v1 на 90 градусов, получаем вектор вдоль другого катета (v2). Поворот по формуле:
  13. // v2.x = -v1.y === v2x = -v1y
  14. // v2.y = v1.x === v2y = v1x
  15. // Альтернативно поворот в другую сторону:
  16. // v2.x = v1.y;
  17. // v2.y = -v1.x;
  18. //3. Имея единичный вектор v2 вдоль второго катета, умножаем покоординатно на длину второго катета, получаем вектор AC:
  19. // v3.x = v2.x * bc_ === v3x = v2x * bc_
  20. // v3.y = v2.y * bc_ === v3y = v2y * bc_
  21. //4. Прибавляем к координатам A вектор AC, получаем точку C:
  22. // xc_ = xa_ + v3x
  23. // yc_ = ya_ + v3y
  24. void __fastcall TriangleStraight3V_01(int xa_, int ya_, int xb_, int yb_, int bc_, int &xc_, int &yc_)
  25. {
  26. int x2x1 = xa_ - xb_;
  27. int y2y1 = ya_ - yb_;
  28. double ab = Sqrt(x2x1*x2x1 + y2y1*y2y1);
  29. double v1x = (xb_ - xa_) / ab;
  30. double v1y = (yb_ - ya_) / ab;
  31. double v3x = (v1y > 0 ? -v1y : v1y) * bc_;
  32. double v3y = (v1x > 0 ? v1x : -v1x) * bc_;
  33.  
  34. xc_ = xa_ + v3x;
  35. yc_ = ya_ + v3y;
  36. }
  37.  
  38. function FindPointB(T: Triangle; no: Integer): Point;
  39. var
  40. unitVec: Point;
  41. begin
  42.  
  43. // Единичный вектор:
  44. unitVec.x := (T.pointA.x - T.pointC.x) / T.sideB;
  45. unitVec.y := (T.pointA.y - T.pointC.y) / T.sideB;
  46.  
  47. if no = 1 then begin // первое решение.
  48. Result.x := T.pointC.x + (-unitVec.y * T.sideA);
  49. Result.y := T.pointC.y + (unitVec.x * T.sideA);
  50. end else begin // второе решение.
  51. Result.x := T.pointC.x + (unitVec.y * T.sideA);
  52. Result.y := T.pointC.y + (-unitVec.x * T.sideA);
  53. end;
  54.  
  55. end;
  56.  
  57. PointF GetOrtogonalPoint(PointF a, PointF b, float bc)
  58. {
  59. float x2x1 = a.X - b.X;
  60. float y2y1 = a.Y - b.Y;
  61. float ab = (float)Math.Sqrt(x2x1 * x2x1 + y2y1 * y2y1);
  62. float v1x = (b.X - a.X) / ab;
  63. float v1y = (b.Y - a.Y) / ab;
  64. float v3x = (v1y > 0 ? -v1y : v1y) * bc;
  65. float v3y = (v1x > 0 ? v1x : -v1x) * bc;
  66.  
  67. PointF c = new PointF();
  68. c.X = a.X + v3x;
  69. c.Y = a.Y + v3y;
  70. return c;
  71. }
Add Comment
Please, Sign In to add comment