用mathematica可视化几何难题

用mathematica可视化几何难题,math,dynamic,wolfram-mathematica,visualization,Math,Dynamic,Wolfram Mathematica,Visualization,我正试图找出一种方法,沿着顶点为a、B和C的等边三角形的边,独立地移动两个点X和Y。还需要考虑一些碰撞规则: (1) 如果X在一个顶点上,比如说顶点a,那么Y就不能在a上或在其相邻的边上。i、 例如,Y只能位于顶点B或C或边BC上 (2) 如果X在一条边上,比如AB,那么Y不能在A、B上,也不能在A和B附近的任何边上。也就是说,Y必须在顶点C上 我已经知道了如何使用一对滑块沿三角形移动两点,但我不知道如何实现碰撞规则。我尝试使用Slider的排除选项,但结果并不是我所期望的。我更喜欢沿三角形拖动

我正试图找出一种方法,沿着顶点为a、B和C的等边三角形的边,独立地移动两个点X和Y。还需要考虑一些碰撞规则:

(1) 如果X在一个顶点上,比如说顶点a,那么Y就不能在a上或在其相邻的边上。i、 例如,Y只能位于顶点B或C或边BC上

(2) 如果X在一条边上,比如AB,那么Y不能在A、B上,也不能在A和B附近的任何边上。也就是说,Y必须在顶点C上

我已经知道了如何使用一对滑块沿三角形移动两点,但我不知道如何实现碰撞规则。我尝试使用Slider的排除选项,但结果并不是我所期望的。我更喜欢沿三角形拖动点,而不是使用滑块,因此如果有人知道如何做,这将是有益的。理想情况下,我能够 将两个点从顶点移动到任意一条边,而不是在其中一条边上停止。这是到目前为止我的代码

MyTriangle[t\uz]:=
分段[{{-1,0}+(t/100){1,Sqrt[3]},
100>t>=0},{{0,Sqrt[3]}+(t/100-1){1,-Sqrt[3]},
200>t>=100},
{{1,0}+(t/100-2){-2,0},300>=t>=0}]
排除的[x]:=\[分段]{
{Range[0,99]~Join~Range[201299],x==0},
{Range[0199],x==100},
{Range[101299],x==200},
{Range[0199]~Join~Range[201299],0 {范围[1299],100 {Range[0,99]~Join~Range[101299],200 }
{动态[t],动态[x]}
{Slider[Dynamic[t],{0299,1},排除->动态[excluded[x]],动态[t]}
{滑块[动态[x],{0299,1},排除->动态[排除[t]],动态[x]}
动态[图形[{PointSize[Large],点[MyTriangle[t]], 点[MyTriangle[x]],
行[{-1,0},{1,0},{0,Sqrt[3]},{-1,0}]},
PlotRange->{{-1.2,4.2},{-.2,2}]]


像这样的东西怎么样:

MyTriangle[t_]:=Piecewise[{
    {{-1,0}+t {1,Sqrt[3]},1>t>=0},
    {{0,Sqrt[3]}+(t-1) {1,-Sqrt[3]},2>t>=1},
    {{1,0}+(t-2) {-2,0},3>=t>=0},{0,True}}]

列[{
{Slider[Dynamic[x],{0,3,01}],Dynamic[x]},
{Slider[Dynamic[y],{0,3,01}],Dynamic[y]},
动态[x=Mod[x,3];其中[
x==0,其中[0。
Column[{
  {Slider[Dynamic[x], {0, 3, .01}], Dynamic[x]},
  {Slider[Dynamic[y], {0, 3, .01}], Dynamic[y]},
  Dynamic[x = Mod[x, 3]; Which[
   x==0.,Which[0.<=y<1.,y=1.,2.<y<=3.,y=2.],0.<x<1.,y=2.,
   x==1.,Which[1.<=y<2.,y=2.,0.<y<=1.,y=0.],1.<x<2.,y=0.,
   x==2.,Which[2.<=y<3.,y=0.,1.<y<=2.,y=1.],2.<x<3.,y=1.];
   Graphics[{PointSize[Large], Point[MyTriangle /@ {x, y}], 
     Line[{{-1, 0}, {1, 0}, {0, Sqrt[3]}, {-1, 0}}]}]]}]