【问题标题】:Range of a Rhombus菱形的范围
【发布时间】:2013-05-01 08:08:35
【问题描述】:

我想做一个函数来检查一个点是否在菱形范围内,

Bool Conditional::InRange(Point P)
{
    if( (P.x > Position.x-100) && (P.x < Position.x+100) &&
        (P.y > Position.y-60)  && (P.y < Position.y+60))
        return true;
    else
        return false;
}

我最终得到一个矩形范围如何使这个范围成为菱形? ,其中位置为中心,高度=120 宽度=200

【问题讨论】:

  • 首先提示:任何像if (foo) return true; else return false;这样的函数都应该写得更简单return foo;
  • @Nate 数学解释请参考math.stackexchange.com/questions/312403/…
  • 你的菱形有几何限制吗?它的“底部”边缘是否与您的飞机平齐?

标签: c++ range diamond-problem


【解决方案1】:

菱形坐标是A,B,C,D

点是我们需要检查的P。

寻找夹角

pa,pb - 角度1

pb,pc - 角度2

pc,pd - 角度3

pd,pa - 角度4

现在如果所有角度的和是 360 或 -360 则 P 在 ABCD 内 否则它就在外面。

角度你可以使用斜率截距形式找到。

即m = (y2-y1)/(x2-x1)

找到坡度后,例如 对于 pa 线段斜率为 m1 对于 pb 线段斜率为 m2 那么角度可以通过 tan(angle) = (m1-m2)/(1+m1*m2);

你可以使用这个链接

http://en.wikipedia.org/wiki/Point_in_polygon

【讨论】:

  • 感谢您的回复,但是如何才能通过斜坡获得角度??
  • @Nate After You Found the slope e.g. pa线段斜率为m1,pb线段斜率为m2,则可以通过tan(angle) = (m1-m2)/(1+m1*m2)计算角度;
  • 再次感谢,希望不会打扰到您 :),但我需要角度,所以我得到了 tan inverse 的答案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多