【问题标题】:Pythagorean Theorem to check whether a cell is inside the radius勾股定理检查细胞是否在半径内
【发布时间】:2019-10-08 22:21:42
【问题描述】:

我有一个矩阵的维度和一个具有半径给定单元

那么我们来看看这个例子:

矩阵有5行6列。我们得到了具有 半径 2 的单元格 (2, 3)。它有冲击力,它会破坏一定半径内的所有物品(冲击单元格为阴影黑色其他单元格在半径为 灰色)。我发现我可以使用 勾股定理 来检查一个单元格是否在半径内:

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

我不明白它为什么起作用,如果您能向我解释一下,我将不胜感激。试了调试,还是不明白。

【问题讨论】:

  • @UK_Dev,对不起,我不明白你的意思。我是 8 年级,我很难理解你写的东西。

标签: c# matrix multidimensional-array


【解决方案1】:

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

现在让我们称这两个catheti ab 以及斜边c。那么我们下面的等式是正确的:

c2 = a2 + b2      (Pythagorean theorem

在您的情况下,abtargetRow - rowtargetColumn - colcradius

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

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|)

【讨论】:

    【解决方案2】:

    我不确定除了勾股定理之外还有什么要解释的,只是圆的方程x^2 +y^2 = r^2

    因此,在循环中,您正在评估评估点是否落在圆内。

    检查是否有帮助:Pythagorean Theorem in Circles

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多