gpt4 book ai didi

c++ - 查找点位于矩形对角线分割的矩形内的哪个扇区

转载 作者:行者123 更新时间:2023-12-02 09:59:22 24 4
gpt4 key购买 nike

我有一个程序,该程序需要一个基于x和y输入返回int(0-3)的函数。返回int应该基于“扇区”,即该点位于已在其对角线上切割的矩形内。 enter image description here
这是我当前的代码

int liesIn(double x, double y, double w, double h){
//x and y are relitive, so the top left corner can be thought of as the origin (0,0)
double rectAspect = w / h;
double pointAspect = x / y;
if(rectAspect > pointAspect)//top of the topLeft-BottomRight line
{
if(y > x * rectAspect)
{
return 3;
}else if(y < x * rectAspect){
return 0;
}
return 4;
}else if(rectAspect < pointAspect)
{
if(y > x * rectAspect)
{
return 2;
}else if(y < x * rectAspect){
return 1;
}
return 4;
}else{
return 4;//4 is the "false" condition, if the point lies on one of the
}
};

std::cout << liesIn(0.25, 0.5, 1, 1) << std::endl; //should return 3, returns 3
std::cout << liesIn(0.75, 0.1, 1, 2) << std::endl; //should return 1, returns 1
std::cout << liesIn(0.5, 0.75, 1, 1) << std::endl; //should return 2, returns 3
std::cout << liesIn(0.5, 0.25, 1, 1) << std::endl; //should return 0, returns 1
这几乎给出了随机结果,这是不正确的。我需要解决什么?

最佳答案

一个对角线(从0,0起)具有等式

y * w - x * h = 0
另一个对角线有等式
y * w + x * h - h * w = 0
将点x,y代入这些方程式可得出象限(结果符号告诉我们对角点位于哪一侧)。
int liesIn(double x, double y, double w, double h){

if (y < 0 || y >= h || x < 0 || x >= w)
return 5; //outside result if needed

if (y * w - x * h == 0 || y * w + x * h - h * w == 0)
return 4; //lies on diagonal
//note possible issues due to float precision limitations
//better to compare fabs() with small epsylon value

int code = 0;

if (y * w + x * h - h * w > 0)
code += 1; //above second diagonal

if (y * w - x * h > 0) {
code += 2; //above main diagonal
code = 5 - code; //flip 2/3 values to get your numbering
}
return code;
};
对于您的示例给出3 0 2 0-请注意,关于 (0.75, 0.1, 1, 2) << std::endl; //should return 1,的假设是错误的,0是正确的结果
和明确的例子:
 liesIn(1, 0.2, 2, 1)      0
liesIn(1.5, 0.5, 2, 1) 1
liesIn(1, 0.8, 2, 1) 2
liesIn(0.5, 0.5, 2, 1) 3
liesIn(1, 0.5, 2, 1) 4

关于c++ - 查找点位于矩形对角线分割的矩形内的哪个扇区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63460249/

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