gpt4 book ai didi

c# - 毕达哥拉斯定理检查单元是否在半径内

转载 作者:行者123 更新时间:2023-12-03 08:54:57 25 4
gpt4 key购买 nike

我有一个矩阵的尺寸和一个具有半径给定单元格

让我们看一下这个例子:

Matrix

矩阵有5 行6 列。我们得到半径为 2 的单元格 (2, 3)。它会产生影响,并摧毁一定半径内的所有元素(影响单元被阴影为黑色,而范围内的其他单元半径为灰色阴影)。我发现我可以使用毕达哥拉斯定理来检查单元格是否在半径内:

if (Math.Pow(targetRow - row, 2) + Math.Pow(targetColumn - col, 2) <= radius * radius)
{
matrix[row, col] = 1;
}

我不明白为什么它会起作用,如果你能向我解释一下,我将非常感激。我尝试调试,但还是没明白。

最佳答案

它是有效的,因为您可以将圆的半径视为直角三角形的斜边,并且如果圆心位于直角三角形的原点(0, 0)坐标系中,x 和 y 坐标是另外两侧(catheti)。

enter image description here

现在我们将两个长边称为ab 以及斜边c。那么我们下面的等式成立:

c2 = a2 + b2      (Pythagorean theorem)

在您的情况下,abtargetRow - rowtargetColumn - colc 半径

我不知道Math.Pow是如何实现的,但它适用于 double 并且相当昂贵。用整数进行数学运算。

int dr = targetRow - row;
int dc = targetColumn - col;
if (dr * dr + dc * dc <= radius * radius)
{
matrix[row, col] = 1;
}

旁注:用毕达哥拉斯定理计算的距离是欧几里得距离:

d欧几里德 = √(dx2 + dy2)

它适合您的问题。但还有其他定义距离的方法。尤其是在矩阵中。

曼哈顿的一辆出租车首先沿着南北轴线行驶,然后进行直角转弯,沿着东西轴线行驶到达目标。这是出租车几何。最短的车程称为曼哈顿距离:

d曼哈顿 = |dx| + |dy|

在棋盘上,国王和王后可以水平、垂直和沿对角线移动。这种情况下的最小距离称为切比雪夫距离国际象棋距离

d切比雪夫 = max(|dx|, |dy|)

关于c# - 毕达哥拉斯定理检查单元是否在半径内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56256646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com