shadeyourself

simpson line wolfram mathematica

May 30th, 2021 (edited)
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.98 KB | None | 0 0
  1. MIN = -3; MAX = 4;
  2.  
  3. (**)
  4. (*уравнения сторон треугольника для нахождения всевозможных \
  5. пересечений*)
  6. (**)
  7. abxy[a_, x_, y_] := Det[{
  8. {x - a[[1]][[1]], y - a[[1]][[2]]},
  9. {x - a[[2]][[1]], y - a[[2]][[2]]}
  10. }];
  11. bcxy[a_, x_, y_] := Det[{
  12. {x - a[[3]][[1]], y - a[[3]][[2]]},
  13. {x - a[[2]][[1]], y - a[[2]][[2]]}
  14. }];
  15. caxy[a_, x_, y_] := Det[{
  16. {x - a[[3]][[1]], y - a[[3]][[2]]},
  17. {x - a[[1]][[1]], y - a[[1]][[2]]}
  18. }];
  19. (**)
  20. (*уравнения перпендекулярных к сторонам треугольника направлений для:
  21. 1)нахождения центра окружности (как центр пересечния серединных \
  22. перпендекуляров) и её радиуса, чтобы по окружности бегала \
  23. многоуважаемая точка
  24. 2)постороения перпендекуляров из бегущей по окружности
  25. *)
  26. (**)
  27. pabxy[a_, x_, y_] := (a[[2]] - a[[1]]) . {x, y};
  28. pbcxy[a_, x_, y_] := (a[[3]] - a[[2]]) . {x, y};
  29. pcaxy[a_, x_, y_] := (a[[1]] - a[[3]]) . {x, y};
  30. (**)
  31. (*окуржность, центр, радиус*)
  32. (**)
  33. circlexy[a_, x_, y_] := Det[{
  34. {x^2 + y^2, x, y, 1},
  35. {((a[[1]])[[1]])^2 + ((a[[1]])[[2]])^2, (a[[1]])[[1]], (a[[1]])[[
  36. 2]], 1},
  37. {((a[[2]])[[1]])^2 + ((a[[2]])[[2]])^2, (a[[2]])[[1]], (a[[2]])[[
  38. 2]], 1}, (*уравнение описанной окружности*)
  39. {((a[[3]])[[1]])^2 + ((a[[3]])[[2]])^2, (a[[3]])[[1]], (a[[3]])[[
  40. 2]], 1}}
  41. ];
  42. (*координаты центра == координаты точки пересечения серединных \
  43. перпендекуляров (мы знаем что три точно пересекаются в одной точке, \
  44. так что берем любые два)*)
  45. circleCenter[a_] :=
  46. SolveValues[{pabxy[a, x, y] -
  47. pabxy[a, ((a[[1]] + a[[2]])/2)[[1]], ((a[[1]] + a[[2]])/2)[[
  48. 2]]] == 0,
  49. pbcxy[a, x, y] -
  50. pbcxy[a, ((a[[2]] + a[[3]])/2)[[1]], ((a[[2]] + a[[3]])/2)[[
  51. 2]]] == 0}, {x, y}][[1]];
  52. R[a_] := Norm[a[[1]] - circleCenter[a]];
  53. (*бегущая по окружности точка*)
  54. circlePoint[
  55. a_, \[Alpha]_] := {R[a]*Cos[\[Alpha]] + circleCenter[a][[1]],
  56. R[a]*Sin[\[Alpha]] + circleCenter[a][[2]]};
  57. (*точки пересечения перпендекуляров, опущенных из бегущей по \
  58. окружности точки, с соответсвующими сторонами*)
  59. abPoint[a_, \[Alpha]_] :=
  60. SolveValues[{pabxy[a, x, y] -
  61. pabxy[a, circlePoint[a, \[Alpha]][[1]],
  62. circlePoint[a, \[Alpha]][[2]]] == 0, abxy[a, x, y] == 0}, {x,
  63. y}][[1]];
  64. bcPoint[a_, \[Alpha]_] :=
  65. SolveValues[{pbcxy[a, x, y] -
  66. pbcxy[a, circlePoint[a, \[Alpha]][[1]],
  67. circlePoint[a, \[Alpha]][[2]]] == 0, bcxy[a, x, y] == 0}, {x,
  68. y}][[1]];
  69. caPoint[a_, \[Alpha]_] :=
  70. SolveValues[{pcaxy[a, x, y] -
  71. pcaxy[a, circlePoint[a, \[Alpha]][[1]],
  72. circlePoint[a, \[Alpha]][[2]]] == 0, caxy[a, x, y] == 0}, {x,
  73. y}][[1]];
  74. (**)
  75. (*три прямых симпсона для проверки*)
  76. (**)
  77. simpsonABBC[a_, \[Alpha]_, t_] :=
  78. Tan[0.99999 (t - 1/2) \[Pi]]*(bcPoint[a, \[Alpha]] -
  79. abPoint[a, \[Alpha]]) + abPoint[a, \[Alpha]];
  80. simpsonBCCA[a_, \[Alpha]_, t_] :=
  81. Tan[0.99999 (t - 1/2) \[Pi]]*(caPoint[a, \[Alpha]] -
  82. bcPoint[a, \[Alpha]]) + bcPoint[a, \[Alpha]];
  83. simpsonCAAB[a_, \[Alpha]_, t_] :=
  84. Tan[0.99999 (t - 1/2) \[Pi]]*(abPoint[a, \[Alpha]] -
  85. caPoint[a, \[Alpha]]) + caPoint[a, \[Alpha]];
  86. Manipulate[
  87. Show[
  88. ParametricPlot[simpsonABBC[a, \[Alpha], t], {t, 0, 1},
  89. PlotStyle -> Directive[Thick, Green]],
  90. ParametricPlot[simpsonBCCA[a, \[Alpha], t], {t, 0, 1},
  91. PlotStyle -> Directive[Thick, Green]],
  92. ParametricPlot[simpsonCAAB[a, \[Alpha], t], {t, 0, 1},
  93. PlotStyle -> Directive[Thick, Green]],
  94. Graphics[{
  95. {Thick, Black, Line[{a[[1]], a[[2]], a[[3]], a[[1]]}]},
  96. {Red, PointSize[0.025], Point[circlePoint[a, \[Alpha]]]},
  97. {Red, PointSize[0.019], Point[abPoint[a, \[Alpha]]]},
  98. {Red, PointSize[0.019], Point[bcPoint[a, \[Alpha]]]},
  99. {Red, PointSize[0.019], Point[caPoint[a, \[Alpha]]]},
  100. {Dashed, Red,
  101. Line[{abPoint[a, \[Alpha]], circlePoint[a, \[Alpha]]}]},
  102. {Dashed, Red,
  103. Line[{bcPoint[a, \[Alpha]], circlePoint[a, \[Alpha]]}]},
  104. {Dashed, Red,
  105. Line[{caPoint[a, \[Alpha]], circlePoint[a, \[Alpha]]}]}
  106. }],
  107. ContourPlot[circlexy[a, x, y] == 0, {x, MIN, MAX}, {y, MIN, MAX},
  108. ContourStyle -> Directive[Thick, Black]],
  109. ContourPlot[{abxy[a, x, y] == 0, bcxy[a, x, y] == 0,
  110. caxy[a, x, y] == 0}, {x, MIN, MAX}, {y, MIN, MAX},
  111. ContourStyle -> Directive[Dashed, Black]],
  112.  
  113. PlotRange -> {{MIN, MAX}, {MIN, MAX}}, Axes -> False, Frame -> True
  114. ],
  115. {\[Alpha], 0, 2 \[Pi]},
  116. {{a, {{-1, -1}, {1, -1}, {0, 1}}}, Locator}
  117. ]
Add Comment
Please, Sign In to add comment