У меня есть Габаритные размеры матрицы и данная ячейка с радиус.
Итак, давайте посмотрим на этот пример:
Матрица имеет 5 рядов и 6 столбцов. Нам дана ячейка (2, 3) с радиус 2. Он оказывает влияние и уничтожает все предметы в определенном радиусе (ударная ячейка затенен чернить, а другие клетки в радиусе затенен серый). Я обнаружил, что могу использовать Теорема Пифагора, чтобы проверить, находится ли ячейка внутри радиуса:
if (Math.Pow(targetRow - row, 2) + Math.Pow(targetColumn - col, 2) <= radius * radius)
{
matrix[row, col] = 1;
}
Я не понимаю, почему это работает, и я был бы очень признателен, если бы вы могли объяснить мне это. Я пытался отладить, но я все еще не понимаю.
Это работает, потому что вы можете думать о радиусе круга как о гипотенузе прямоугольного треугольника, и, если центр круга находится в начале координат (0, 0)
системы координат, координаты x и y являются двумя другими стороны (катеты).
Теперь назовем два катетиса a
и b
, а гипотенузу c
. Тогда верно следующее уравнение:
c2 = a2 + b2 (теорема Пифагора)
В вашем случае a
и b
— это targetRow - row
и targetColumn - col
, а c
— это radius
.
Я не знаю, как реализован Math.Pow
, но он работает на двойниках и стоит довольно дорого. Посчитайте с целыми числами.
int dr = targetRow - row;
int dc = targetColumn - col;
if (dr * dr + dc * dc <= radius * radius)
{
matrix[row, col] = 1;
}
Примечание: расстояние, рассчитанное по теореме Пифагора, равно Евклидово расстояние:
Это подходит для вашей проблемы. Но есть и другие способы определения расстояния. Особенно в матрице.
Такси на Манхэттене сначала едет по оси север-юг, затем поворачивает под прямым углом и едет по оси восток-запад, чтобы добраться до цели. Это Геометрия такси. Самый короткий возможный диск называется Манхэттенское расстояние:
На шахматной доске короли и ферзи могут ходить по горизонтали, вертикали и диагонали. Минимальное расстояние в этих условиях называется Расстояние Чебышева или Шахматная дистанция.
Я не уверен, что еще можно объяснить, кроме теоремы Пифагора, просто уравнения для окружности x^2 +y^2 = r^2
.
Таким образом, в цикле вы оцениваете, попадает ли оцениваемая точка внутрь круга.
Проверьте, помогает ли это: Теорема Пифагора в кругах
@UK_Dev, извини, но я тебя не понял. Я учусь в 8 классе и мне сложно понять, что вы написали.