gpt4 book ai didi

c++ - 给定边和中心的矩形内的点

转载 作者:行者123 更新时间:2023-11-28 04:53:16 25 4
gpt4 key购买 nike

我得到一个长方形,它的高度 (h) 和宽度 (w),它的中心是 O(x0,y0) .我需要计算给定点 A(x,y) 是否在该矩形内。它平行于 x 和 y 轴。所有值都是真实的。

我想出了以下测试,但出于某种原因,我正在测试代码的网站并不适用于所有示例。有人能指出我正确的方向吗。

#include <iostream>
#include <cmath>
using namespace std;
int main(){
long x,y,x0,y0,r,h,w;
scanf("%ld",&x);
scanf("%ld",&y);
scanf("%ld",&x0);
scanf("%ld",&y0);
scanf("%ld",&h);
scanf("%ld",&w);
if((x0+w/2.0>=x)&&(x0-w/2.0<=x)&&(y0+h/2.0>=y)&&(y0-h/2.0<=y))
printf("inside a rectangle");
else
printf("outside a rectangle");
}

提前致谢。

最佳答案

OP 编辑​​后:

矩形的边平行于 x 轴和 y 轴。然后也可以获得坐标并应用下面提到的算法。

Centre -- (x0,y0)
A -- (x0-w/2,y0-h/2)
B -- (x0-w/2.y0+h/2)
C -- (x0+w/2,y0+h/2)
D -- (x0+w/2,y0-h/2)

因此,您所要做的就是应用下面提供的算法。

我们可以更简单地做到这一点,

if( 2*x <= 2*x0+w && 2*x >= 2*x0-w && 2*y <= 2*y0+h && 2*y >= 2*y0-h)
// it's inside

OP 编辑​​前

你的逻辑是错误的。它可能会说矩形内部的一个点在它的外部。(对于任何矩形,这是错误的——OP 没有提到边平行于 x-y 轴的条件)

有一种简单且更简洁的方法可以为矩形执行此操作。求出矩形的面积。

假设它是A

现在,如果点 P 位于 ABCD 内,则

area of PAB+PBC+PCD+PDA = A

为了更好的事情,用 ,

AB.Bc+BC.CD+CD.DA+DA.AB = 2*AB*BC

或者更好的是把两边都做成正方形

LHS^2 = 4*AB^2*BC^2

现在你只需乘法并检查它。此解决方案的一个缺点是对于较大的 side length 值,您有可能溢出。

另一种方法是考虑预测。

如果点在矩形内部,则矩形角点到点的投影,在它的两条边上必须小于相应的边。您可以使用点积检查投影长度。

例如如果P是点,ABCD是矩形检查,

如果 APAB 上的投影长度大于零但小于 AB 的长度。检查 BCBP 是否相同,并检查长度是否大于零且小于 BC

这两个条件确保您的点位于矩形内。

关于c++ - 给定边和中心的矩形内的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47726935/

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