c - 如何比较给定角度的两点?

标签 c

<分区>

我有两个点AB 和角度x。假设 vector AaBb 的角度为 x

如果 vector Bb中存在A'满足 AA'b = 90 degree 然后

  • 如果A' = B 那么 Compare(A, B) = 0
  • 其他 Compare(A, B) > 0

其他 Compare(A, B) < 0

POINT a, b;
float x;        // in radian

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

示例:

在下图中, vector Bb中存在A',但 vector Aa'中不存在B'> 满足给定条件,所以 A> B

问题:在 Compare() 函数我需要使用什么代码来获得所需的值?

enter image description here

最佳答案

如果您知道如何使用 Dot Product 就很简单了两个 vector 的。

// 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;
}

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

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);
}

关于c - 如何比较给定角度的两点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45388235/

相关文章:

c - 输入整数文件用于检查反转

linux - 如何在 Linux 上的 C 中查找未初始化的变量?

c - 将节点插入链表末尾

c - 如何使用 CMakeLists.txt 创建库并将其包含在另一个程序中?

c - 字符串文字是否常量?

从 RepeatMasker 开发人员编译 COSEG 时出现 C "undefined reference to"错误

c - undefined reference 'shm_open' ,已在此处添加 -lrt 标志

c - 打印垂直直方图

c - 检测何时写入内存地址

c - 如何在 mac os x 的内核扩展项目中使用 zlib?