首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在给定的角度上比较两点?

如何在给定的角度上比较两点?
EN

Stack Overflow用户
提问于 2017-07-29 10:35:59
回答 1查看 61关注 0票数 0

我有两点AB和角x。假设向量、Aa、Bb有角x

如果载体AA'b = 90 degree中存在A',则满足Bb

  • 如果Compare(A, B) = 0 A‘= B那么A’=B
  • 否则Compare(A, B) > 0

否则Compare(A, B) < 0

代码语言:javascript
复制
POINT a, b;
float x;        // in radian

int Compare(POINT a, POINT b, float x)
{
}

示例:

在图像中,载体A'存在于载体Bb中,而在载体Aa'中不存在B'满足给定条件,因此AE 246><代码>E 147B<代码>E 248。

问:在Compare()函数中,我需要使用哪些代码来获得所需的值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-29 11:00:46

如果你知道如何使用两个向量的点积,那就很简单了。

代码语言:javascript
复制
// Assumed structure:
struct POINTF{
    float x, y;
};

// include math.h for sin() and cos()
int Compare(POINTF a, POINTF b, float x)
{
    POINTF diff = {a.x-b.x, a.y-b.y};
    POINTF base = {cos(x), sin(x)};
    float r = diff.x * base.x + diff.y * base.y;
    if (r == 0.0f) return 0;
    return (r > 0.0f) ? 1 : -1;
}

实际上你不需要两个临时向量。上面的代码是为了告诉你两个向量的点积的计算。您可以将代码简化为

代码语言:javascript
复制
int Compare(POINTF a, POINTF b, float x)
{
    float r = (a.x - b.x) * cos(x) + (a.y - b.y) * sin(x);
    return (r == 0.0f) ? 0 : ((r > 0.0f) ? 1 : -1);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45388235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档