前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >平面几何题解:C 在 AB 的垂线的哪一侧

平面几何题解:C 在 AB 的垂线的哪一侧

作者头像
前端西瓜哥
发布2023-11-09 15:36:56
1360
发布2023-11-09 15:36:56
举报

大家好,我是前端西瓜哥。

工作中遇到的一个平面几何问题,记录一下。

问题

已知点 A、B、C 的坐标,以 B 为垂足绘制 AB 的垂线将二维平面分成两个区域,问 C 是否在 A 所在的区域。

整了半天,发现解法很简单。

问题等价于判断向量 BA 和 BC 的夹角是否小于 90 度。

这个就很容易联想到 向量的点积公式

变形为:

cos 为两个向量的夹角,夹角的范围为 0 到 180 度。

从图可知(只看 0 到 180 的区间),cos 如果为正数,说明夹角在 0 到 90 度范围;如果是负数,夹角在 90 到 180 度范围。

向量 a 和向量 b 的模都是正数,不影响正负,所以 cos 的正负符号只和 ab 向量的点积的正负有关。

所以,我们得到:两向量点积为正数,说明它们夹角小于 90 度;如果为负数,说明它们夹角大于 90 度。

算法实现

代码语言:javascript
复制
const isSideOfLineCloseA = (a, b, c) => {
  const ba = { x: a.x - b.x, y: a.y - b.y };
  const bc = { x: c.x - b.x, y: c.y - b.y };
  return dotProduct(ba, bc) > 0;
};

const dotProduct = (a, b) => {
  return a.x * b.x + a.y * b.y;
};

线上 demo

我还写了个可互动 demo:

https://codesandbox.io/s/gtnhnr

(以为会很复杂,专门写来测试的...)

结尾

点积的特性在计算机图形学使用的地方相当多。

除了判断向量夹角小于还是小于 90 度,还很很多的其他的场景。

比如直接计算两向量的夹角,或是计算投影长度,可用于分离轴定理判断两个凸多边形是否碰撞。

我是前端西瓜哥,欢迎关注我,学习更多解析几何知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端西瓜哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 算法实现
  • 线上 demo
  • 结尾
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档