Это работает, потому что вы можете думать о радиусе как о гипотенузе прямоугольного треугольника, и, если центр круга находится в начале координат (0, 0)
системы координат, координаты x и y являются две другие стороны (катети).
Теперь давайте назовем две катетии a
и b
и гипотенузу c
. Тогда у нас следующее уравнение верно:
c 2 = a 2 + b 2 ( теорема Пифагора )
В вашем случае 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;
}
Примечание: расстояние, рассчитанное по теореме Пифагора, равно евклидову расстоянию :
d евклидов = & radic; (dx 2 + dy 2 )
Это подходит для вашей проблемы. Но есть и другие способы определения расстояния. Особенно в матрице.
Такси в Манхэттене сначала проезжает вдоль оси север-юг, затем поворачивает на прямой угол и едет вдоль оси восток-запад, чтобы достичь цели. Это Taxicab geometry . Самый короткий путь называется Манхэттенское расстояние :
d Манхэттен = | dx | + | dy |
На шахматной доске короли и королевы могут двигаться горизонтально, вертикально и вдоль диагоналей. Минимальное расстояние при этих обстоятельствах называется Чебышевское расстояние или Шахматное расстояние
d Чебышев = max (| dx |, | dy |)