Графика Вопрос: Как я могу ограничить курсор мыши внутри круга? - PullRequest
2 голосов
/ 18 мая 2010

Я играю с XNA. Когда я нажимаю левую кнопку мыши, я записываю координаты X, Y. Удерживая кнопку мыши нажатой, перемещение мыши рисует линию от этого начала координат до текущей позиции мыши. Я сместил это в середину окна.

Теперь, что я хотел бы сделать, это ограничить курсор мыши в пределах круга (с радиусом N, центрированным в середине экрана). Ограничить мышь прямоугольной областью достаточно просто (путем настройки источника по разности положения мыши и размера области), но я не знаю, как начать делать это для круглой области. *

Может кто-нибудь объяснить, как это сделать? Любой совет, с чего начать, будет полезен.

Ответы [ 2 ]

7 голосов
/ 18 мая 2010

Я понятия не имею, как использовать XNA ... поэтому не могу дать вам конкретный код, но идея проста.

Просто проверьте расстояние между текущим положением мыши и началом координат с помощью теоремы Пифагоры:

dist = sqrt((current_y - orig_y)^2 + (current_x - orig_x)^2)

Затем проверьте, что dist

6 голосов
/ 18 мая 2010

Вам необходимо при каждом перемещении мыши ограничивать его прямоугольником между его текущим положением и ближайшей точкой на окружности.

Ближайшая точка на окружности получается

пусть (x, y) будет там, где находится мышь, (x 0 , y 0 ) будет источником

(x 0 -x, y 0 -y) - вектор от начала координат до указателя

d = sqrt ((x 0 -x) 2 + (y 0 -y) 2 ) - длина этого вектора

(N * (x 0 -x) / d, N * (y 0 -y) / d) - это точка на расстоянии N от начала координат вдоль линия, соединяющая начало координат с позицией мыши, то есть ближайшая точка на окружности к указателю мыши.

...