Визуализация геометрической головоломки с помощью математики

Я пытаюсь найти способ переместить две точки, 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_]: =
Кусочно [{{{- 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 [201, 299], x == 0},
{Диапазон [0, 199], x == 100},
{Диапазон [101, 299], x == 200},
{Диапазон [0, 199] ~ Присоединиться к ~ диапазону [201, 299], 0 {Диапазон [1, 299], 100 {Range [0, 99] ~ Join ~ Range [101, 299], 200 }
{Динамический [t], Динамический [x]}
{Slider [Dynamic [t], {0, 299, 1}, Exclusions -> Dynamic [excluded [x]]]], Dynamic [t]}
{Slider [Dynamic [x], {0, 299, 1}, Exclusions -> Dynamic [excluded [t]]]], Dynamic [x]}
Динамический [Графика [{PointSize [Large], Point [MyTriangle [t]], Точка [MyTriangle [x]],
Строка [{{- 1, 0}, {1, 0}, {0, Sqrt [3]}, {-1, 0}}]},
PlotRange -> {{-1.2, 4.2}, {-.2, 2}}]]

Mathematica graphics

1
задан Sjoerd C. de Vries 2 January 2012 в 21:43
поделиться