【发布时间】:2023-03-18 20:07:01
【问题描述】:
我一直想知道判断一个点是否位于三角形内的最简单方法,或者在这种情况下,是一个对角线切成两半的矩形。
假设我有一个 64x64 像素的矩形。对于这个矩形,如果传递的点在矩形的左上角内,我想返回一个 TRUE 值,如果不是,则返回 FALSE。
-----
| /|
| / |
|<__|
糟糕的 ASCII 艺术万岁。
无论如何,这个三角形返回 TRUE 的假设点是 (0,0) 和 (63,0) 和 (0, 63)。如果一个点落在一条线上(例如 50,0),它也会返回 TRUE。
假设0,0在左上角并向下增加...
我已经想到了一个可能的解决方案,但它似乎比它应该的更复杂 - 获取传递的 Y 值,确定它在矩形中的位置,然后手动确定线会在哪里切割Y 值。例如,传递的 Y 值 16 将是矩形的四分之一高度。因此,根据您检查的哪一侧(左或右),线将是 16 像素或 48 像素,具体取决于线的方向。 在上面的示例中,由于我们正在测试左上角,高度为 16 像素,因此线条的宽度为 48 像素
必须有更好的方法。
编辑: 矩形也可以是这样的
-----
|\ |
| \ |
|__>|
但我认为在大多数情况下,已经提供的当前答案应该仍然有效......
【问题讨论】:
-
有math.stackexchange.com 你也问这个问题。有人会为您的问题提出几种解决方案,但您没有说明您需要什么 - 速度、针对特定情况的优化或只是明确的表述。
-
只是明确的公式。我通常可以想出一个解决方案,但它并不优雅,而且速度是一个问题。我喜欢看到不同的方式来做这件事,所以我可以在我已经在做的事情之外思考。它也可以帮助我记住基本的数学:[