|
|
1
74
矩形是如何表示的?三分?四分?点,边和角度?两点一边?还有别的吗?在不知道的情况下,任何试图回答你问题的尝试都只会有纯粹的学术价值。 在任何情况下 凸面的 多边形(包括矩形)测试非常简单:检查多边形的每条边,假设每条边都是逆时针方向的,并测试点是否位于 向左 边缘(在左手边的半平面上)。如果所有的边都通过了测试-那点就在里面。如果至少有一个失败了-关键就在外面。
为了检验这一点
如果
这个答案的前一个版本描述了一个看似不同的左侧测试版本(见下文)。但可以很容易地证明,它计算的值是相同的。
…为了检验这一点
哪里
现在你要做的就是计算
如果
但是,这个测试同样适用于任何凸多边形,这意味着它对于矩形来说可能太通用了。一个矩形可能允许更简单的测试…例如,在矩形(或任何其他平行四边形)中
|
|
|
2
38
假设矩形由三个点a、b、c表示,ab和bc垂直,则只需检查查询点m在ab和bc上的投影:
更新 . 举个例子来说明这一点:a(5,0)b(0,2)c(1,5)和d(6,3)。 从点坐标,我们得到ab=(-5,2),bc=(1,3),dot(ab,ab)=29,dot(bc,bc)=10。 对于查询点m(4,2),我们有am=(-1,2),bm=(4,0),dot(ab,am)=9,dot(bc,bm)=4。m在矩形内。 对于查询点p(6,1),我们有ap=(1,1),bp=(6,-1),dot(ab,ap)=-3,dot(bc,bp)=3。p不在矩形内,因为它在ab侧的投影不在ab段内。 |
|
3
15
|
|
|
4
15
我借用了埃里克·班维尔的回答:
在javascript中是这样的:
如:
然后:
下面是一个代码笔,用于将输出绘制为可视测试:) http://codepen.io/mattburns/pen/jrrprN
|
|
|
5
11
我意识到这是一个古老的线索,但是对于任何有兴趣从纯数学的角度来看待这个问题的人来说,在数学堆栈交换上有一个极好的线索,这里是: https://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle 编辑:受这条线索的启发,我提出了一个简单的向量方法,可以快速确定你的点在哪里。 假设有一个矩形,点位于p1=(x1,y1)、p2=(x2,y2)、p3=(x3,y3)和p4=(x4,y4),顺时针方向。如果点p=(x,y)位于矩形内,则点积(p-p1)。(p2-p1)将位于0和p2-p1 ^2之间,并且(p-p1)。(p4-p1)将位于0和p4-p1 ^2之间。这相当于将向量p-p1沿矩形的长度和宽度投影,以p1为原点。 如果我显示一个等效代码,这可能更有意义:
就这样。它也适用于平行四边形。 |
|
|
6
6
如果你不能解决矩形的问题,试着把问题分成容易的问题。 将矩形分成两个三角形,检查点是否在其中任何一个三角形内,如中所述 here 从本质上讲,你从一个点开始,每两对直线上的边循环一次。然后使用叉积检查点是否在使用叉积的两行之间。如果对所有3个点都进行了验证,则该点位于三角形内部。这个方法的好处是它不会产生任何浮点错误,如果你检查角度的话会发生这种错误。 |
|
|
7
5
我刚用C++实现了蚂蚁的答案。我用这段代码检查像素的坐标(x,y)是否位于形状内部。 |
|
|
8
4
如果一个点在矩形内。在飞机上。用于数学家或大地测量(GPS)坐标
P是一个点。对于点,属于L 我 ,方程是真的。
不满足条件并不严格,因为如果一个点在边界上,它也属于矩形。如果不需要边界上的点,可以将不等式改为严格不等式。但是当你在浮点运算中工作时,这个选择是不相关的。
支票可以简化-让我们沿着矩形走 顺时针方向的 -A,B,C,D,A。那么所有正确的边都在直线的右边。所以,我们不必和另一个眩晕的那一边相比。我们需要检查一组较短的不等式: f 抗体 (p)>=0 f 公元前 (p)>=0 f 光盘 (p)>=0 f 达 (p)>=0 但这对正常人来说是正确的, 数学家 (来自学校数学)一组坐标,其中x在右边,y在上面。为了 大地测量学 坐标,如GPS中使用的,X在顶部,Y在右侧,我们必须改变不等式: f 抗体 (P)<=0 f 公元前 (P)<=0 f 光盘 (P)<=0 f 达 (P)<=0 如果您不确定轴的方向,请注意这个简化的检查-检查已知位置的一个点,如果您选择了正确的不等式。 |
|
|
9
0
我想到的最简单的方法就是将点投影到矩形的轴上。让我解释一下: 如果可以得到从矩形中心到上边缘或下边缘以及左边缘或右边缘的矢量。你也有一个从矩形中心到你的点的向量,你可以把这个点投影到你的宽度和高度向量上。 P=点向量,H=高度向量,W=宽度向量 将向量除以其大小,得到单位向量w',h' 项目,H=P-(P.H')H' 项目,W=P-(P.W')W' 除非我错了,我不认为我是…(如果我错了,请纠正我)但是如果你的点在高度向量上的投影大小小于高度向量的大小(它是矩形高度的一半)和你的点在宽度向量上的投影大小,那么你的点在你的长方形。 如果有通用坐标系,则可能需要使用矢量减法计算高度/宽度/点向量。矢量投影是惊人的!记住这一点。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |