Предположим, что ваш квадрат выровнен с осями координат. (Если нет, сначала поверните всю проблему). Затем разбивают плоскость на девять частей: внутри квадрата, сверху и слева от квадрата, непосредственно выше, и т.д .:
. .
. .
. .
| |
1 | 2 | 3
...-----+------+-----...
| |
4 | 5 | 6
| |
...-----+------+-----...
7 | 8 | 9
| |
. .
. .
. .
Затем классифицировать вашу точку путем сравнения координат с линиями, которые образуют квадрат. Если точка попадает в области 1, 3, 7 или 9, то ближайшая точка на квадрате является соответствующей вершиной. Если он попадает в области 2, 4, 6 или 8, ближайшая точка - это проекция на соответствующую сторону. (Просто замените соответствующую координату в точке координатой стороны.) В области 5 вам нужно решить, какая сторона ближе всего. Это можно сделать простым вычитанием соответствующей координаты. Как только ближайшая сторона будет идентифицирована, замените координату, и все будет готово.
Поскольку область 5 является наиболее сложным (и самое непосредственное отношение к вашему вопросу), вот как я бы это сделать:
Пусть точка имеет координаты (X, Y) и стороны квадрата быть координаты y = Y верх, y = Y нижний, и аналогичным образом для x. Затем сравните | X - X оставил |, | X - X право |, | Y - Y топ | и | Y - Y нижний | чтобы решить, что ближе. Скажите, что это верх. Тогда ближайшая точка на квадрате (X, Y top), а расстояние между точкой и стороной - это просто Y-Y top |
В моем описательном описании я просто использовал абсолютные значения для области 5, но вы можете избежать абсолютных значений, изменив соответствующие вычитания. (Какие из них следует отменить, зависит от того, как работают оси координат.) Я также проигнорировал проблему для классификации точки. Вы просто должны быть последовательны в отношении знаков повсюду.
Добро пожаловать в переполнение стека! Похоже, вы просите о помощи на дому. Хотя у нас нет проблем с самим собой, обратите внимание на эти [dos and don'ts] (http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845 # 338845), и соответственно отредактируйте свой вопрос. –
@JoeC На самом деле, это для игры, которую я создаю. Игроки должны оставаться на этой площади, и я хотел бы уведомить их о своем расстоянии до границы и не дать им покинуть ее, если расстояние станет слишком низким. –
OK. Тем не менее, многие из них по-прежнему применяются. –