【发布时间】:2020-08-18 00:26:58
【问题描述】:
我有一个程序,它需要一个基于 x 和 y 输入返回 int (0 - 3) 的函数。返回 int 应基于该点位于已在其对角线上切割的矩形内的“扇区”。
这是我当前的代码
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 到该点绘制的向量的斜率,则该点只能落在扇区 2 或 3。
标签: c++ geometry rectangles