Three.js 直线拐角自动圆角化(圆弧转弯)

目录

前言

计算圆心坐标

计算两条直线的角平分线

[计算dir1 dir2的夹角](#计算dir1 dir2的夹角)

计算圆心到直线交点的距离

计算圆心

计算从正X轴算起曲线开始、终止的角度

计算垂足与两直线交点距离

计算垂足

计算垂线

计算两垂线与x轴的夹角

[​编辑 计算圆弧是否按照顺时针方向来绘制](#编辑 计算圆弧是否按照顺时针方向来绘制)

成功画弧线

多个圆弧的应用


前言

圆弧使用 ArcCurve 绘制,那么需要以下参数

我们拿3个点制作一个圆弧

计算圆心坐标

由 p1 - p2和p3 - p2构成两个向量dir1 dir2 这三个点构成的两条线的方向,

计算两条直线的角平分线

dir1 dir2 向量相加得到两条向量的角平分线

计算dir1 dir2的夹角

通过点乘计算两向量的余弦值,然后通过反余弦得到夹角

计算圆心到直线交点的距离

设圆弧半径为R,设圆心到直线交点距离为L,R = L * Sin(夹角/2) ==> L = R / Sin(夹角/2)

计算圆心

角平分线方向知道了,两向量交点到圆心的距离L知道了,那么圆心坐标就等于 起点+角平分线方向*L

计算从正X轴算起曲线开始、终止的角度

计算垂足与两直线交点距离

计算垂足

垂足向量等于p2起点+各方向*垂足到两直线交点距离

计算垂线

计算两垂线与x轴的夹角

设x轴向量为(1, 0, 0)。

这里需要注意点乘的操作是基于180度有效的,也就是余弦在180度内有效为一个周期,如果垂线的y小于0,需要一个圆周 减去 点乘所算的夹角,如下图示意,点乘算的是黑色弧度角,但真正的垂线与x轴夹角是彩色弧度

计算圆弧是否按照顺时针方向来绘制

根据WebGL右手螺旋定则,dir1 叉乘 dir2 得到的法线向量,判断这个向量的方向是否大于0

成功画弧线

多个圆弧的应用

逻辑和单个圆弧是一样的,需要注意的是,如果多个点之间并不存在弧度,就不需要做弧度处理,可以用两直线向量叉乘计算,如果叉乘结果是0向量(正弦值为0,两向量相反即夹角180度)则说明两条直线没有夹角。

相关推荐
草履虫建模12 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq14 小时前
分布式系统安全通信
开发语言·c++·算法
3DVisionary14 小时前
掌控发动机“心脏”精度:蓝光3D扫描在凸轮轴全尺寸检测中的应用
3d·图形渲染·汽车发动机·精密测量·蓝光3d扫描·凸轮轴检测·形位公差
Jasmine_llq14 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
爱吃rabbit的mq15 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)16 小时前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi16 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱16 小时前
牛客网刷题(2)
java·开发语言·算法
VT.馒头16 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
进击的小头17 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机