Я пытаюсь найти способ перемещения двух точек, X и Y, независимо друг от друга по краям равностороннего треугольника с вершинами A, B и C. Есть также некоторые правила столкновения, которые необходимопринимается во внимание:
(1) Если X находится в вершине, скажем, в вершине A, то Y не может быть на A или на соседних с ним ребрах.т. е. Y может быть только на вершинах B или C или ребре BC.
(2) Если X на ребре, скажем AB, то Y не может быть ни на A, ни на B, ни на каком-либо ребрерядом с A и B. т. е. Y должен находиться в вершине C
. Я понял, как с помощью пары ползунков перемещать две точки вдоль треугольника, но я не могу понять, как реализоватьправила столкновения.Я попытался использовать опцию Исключения для Слайдера, но результаты не соответствуют ожиданиям.Я бы предпочел перетаскивать точки вдоль треугольника, а не с помощью ползунков, поэтому, если кто-то знает, как это сделать, это будет полезно.В идеале я мог бы переместить две точки от вершины к одному из ребер вместо того, чтобы остановиться на одной из них.Вот мой код.
MyTriangle[t_] :=<br>
Piecewise[{{{-1, 0} + (t/100) {1, Sqrt[3]},<br>
100 > t >= 0}, {{0, Sqrt[3]} + (t/100 - 1) {1, -Sqrt[3]},<br>
200 > t >= 100},<br>
{{1, 0} + (t/100 - 2) {-2, 0}, 300 >= t >= 0}}]<br>
excluded[x_] := \[Piecewise] {<br>
{Range[0, 99]~Join~Range[201, 299], x == 0},<br>
{Range[0, 199], x == 100},<br>
{Range[101, 299], x == 200},<br>
{Range[0, 199]~Join~Range[201, 299], 0 < x < 100},<br>
{Range[1, 299], 100 < x < 200},<br>
{Range[0, 99]~Join~Range[101, 299], 200 < x < 300}<br>
}<br>
{Dynamic[t], Dynamic[x]}<br>
{Slider[Dynamic[t], {0, 299, 1}, Exclusions -> Dynamic[excluded[x]]], Dynamic[t]}<br>
{Slider[Dynamic[x], {0, 299, 1}, Exclusions -> Dynamic[excluded[t]]], Dynamic[x]}<br>
Dynamic[Graphics[{PointSize[Large], Point[MyTriangle[t]],
Point[MyTriangle[x]],<br>
Line[{{-1, 0}, {1, 0}, {0, Sqrt[3]}, {-1, 0}}]},<br>
PlotRange -> {{-1.2, 4.2}, {-.2, 2}}]]