首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数值稳定角平分线算法

数值稳定角平分线算法
EN

Stack Overflow用户
提问于 2017-04-15 23:57:17
回答 5查看 1.5K关注 0票数 5

有数值稳定的角平分线算法吗?

问题如下:

  • 给定三个向量(二维) A,B,C
  • 找出B角的平分线( AB和BC之间的夹角)

实际上,我计算它的方式如下:

  • 规范化AB
  • 规范BC
  • 查找(AB+CD)/2f (中点)
  • 平分线是B和中间点之间的一条线。

我的方法的问题是,当夹角接近180°(AB几乎平行于BC)时,平分线非常不准确(当然,因为中点几乎与B重合)。目前的算法是如此不准确,有时得到的平分线几乎平行于其他两个段中的一个。

是的,没有“转换”问题,所有的计算都是用单精度浮点进行的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-04-19 08:11:19

这可不是小事。假设两个边向量是a和b:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float2 a = A - B;
float2 b = C - B;
  1. 计算点积float dp = dot( a, b )
  2. 将两个向量标准化:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float2 a_norm = normalize( a );
float2 b_norm = normalize( b );
  1. 检查点产品的符号位。当dp是非负值时,return normalize( a_norm + b_norm );和您就完成了.
  2. 当点积为负值时,输入向量之间存在钝角。在这种情况下应用天真的公式会破坏数值的精度。需要另一个方法。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float2 c = normalize( a_norm - b_norm );
float dir = dot( a, rotate90( b ) );
return ( dir < 0 ) ? rotate90( c ) : rotate270( c );

注意,-而不是+,这才是精确取胜的原因。当ab的夹角大于90°时,a-b的夹角小于90°,a_norm - b_norm的长度足以给出精确的方向。我们只需要把它旋转90度,然后,在正确的方向。

将二维矢量按90°倍数旋转是无损运算。下面是rotate90和rotate270函数的伪代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float2 rotate90( float2 vec )
{
    return float2( vec.y, -vec.x );
}
float2 rotate270( float2 vec )
{
    return float2( -vec.y, vec.x );
}
票数 2
EN

Stack Overflow用户

发布于 2017-04-16 02:23:21

如果你把BA旋转+90°,BC旋转-90°,你可以使用角度平分线保持不变。

所以,如果情况稳定,即BA和BC的点积是正的,就使用原来的公式。

如果为负值,则对BA (x,y) -> (-y,x)BC (x,y) -> (y,-x)应用旋转,这也会使点乘积变为正。像以前一样处理新的向量。

如果你尝试这一点,你会注意到,在向量之间的角-90°中,现在发生了平分线方向的跳跃。这是不可能避免这种跳转,因为一个连续的平分线将只有在两个回合后(固定BA和移动C)相同。

票数 3
EN

Stack Overflow用户

发布于 2017-04-16 01:36:30

您可以很简单地通过以下方法找到二分法向量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BC* BA +BA* BC

但是,在ABC共线或接近共线的情况下,这在数值上也不会稳定。更好的方法是通过点积找到AB和BC之间的夹角。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cos θ = (BA · BC) / (BC*BA)

即使在共线情况下也会产生正确的角度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43435055

复制
相关文章
Tensorflow入门教程(十一)——数值稳定性
上一篇我介绍了一些如何调试Tensorflow模型。这一篇我会说一说数值稳定性。
医学处理分析专家
2020/06/29
6800
Tensorflow入门教程(十一)——数值稳定性
实现数值校验算法
给定一个字符串如何判断它是否为数值类型?例如:字符串+100、5e2、-123、3.1416以及-1E-16都表示数值,为数值类型,但12e、1a3.14、1.2.3、+-5以及12e+5.4都不是。
神奇的程序员
2022/04/10
4010
实现数值校验算法
利用梯度下降算法预测数值
上一篇关于梯度下降的算法,原作者原理其实已经讲的比较清楚了,下面我将通过一个非常简单的案例,帮助理解并且应用梯度下降算法。
叶子陪你玩
2020/06/10
7740
简述FRAX - 部分算法稳定币
FRAX( Fractional-Algorithmic Stablecoin Protocol)是在以太坊网络上推出并与美元挂钩的去中心化,部分抵押的稳定币。最初是完全抵押的,其目的是逐步过渡到完全算法的稳定币协议
Tiny熊
2021/01/12
1.4K0
杨辉三角变形(算法)
杨辉三角如上,,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
用户9919783
2022/12/14
4450
杨辉三角变形(算法)
Lasso回归算法: 坐标轴下降法与最小角回归法小结
    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结。里面对线程回归的正则化也做了一个初步的介绍。提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归。但是对于Lasso回归的解法没有提及,本文是对该文的补充和扩展。以下都用矩阵法表示,如果对于矩阵分析不熟悉,推荐学习张贤达的《矩阵分析与应用》。
刘建平Pinard
2018/08/14
1.9K0
Lasso回归算法: 坐标轴下降法与最小角回归法小结
机器学习(8)之范数正则与Lasso详解
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 线性回归及L2正则 大家对于线性回归以及带有二范数正则的线性回归已经比较熟悉
昱良
2018/04/04
1.5K0
机器学习(8)之范数正则与Lasso详解
Lasso回归总结
由于直接套用线性回归可能产生过拟合,我们需要加入正则化项,如果加入的是L2正则化项,就是Ridge回归,有时也翻译为岭回归。它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和一个调节线性回归项和正则化项权重的系数α。损失函数表达式如下:
全栈程序员站长
2022/09/02
8790
光伏逆变器建筑设计工具
最近有不同行业的客户咨询我司能不能提供一种解决方案,可以快速实现三维建筑效果,能快速响应市场需要,满足投标、交付、技术服务、厂房建设等需求。客户主要行业领域为新能源光伏逆变器铺设、房地产建筑、工厂厂房等三维建筑领域。 首先我们对他们的需求进行了分析,发现他们的共同需求是三维建筑,他们都想使用简单快速的编辑方式实现三维建筑,然后是业务需求。最终我们决定根据他们的需求,做一个简单的设计工具来实现三维建筑,然后再依次添加他们额外的业务需求。下边就简单的介绍下我们设计工具技术的尝试,如果你有更好的意见和思路可以一起沟通交流,共勉。
用户3158888
2022/03/22
4540
光伏逆变器建筑设计工具
☆打卡算法☆LeetCode 118、 杨辉三角 算法解析
首先来了解一下什么是杨辉三角,杨辉三角是二项式系数在三角形中的一种几何排列,把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。
恬静的小魔龙
2022/08/07
2040
☆打卡算法☆LeetCode 118、 杨辉三角 算法解析
经典算法(5)杨辉三角
上一篇 经典算法(4)一文搞懂什么是 快速排序 下一篇 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法
全栈程序员站长
2022/06/27
2940
经典算法(5)杨辉三角
几何绘图软件尝鲜:让你的学生真正告别三角板量角器尺规作图
今天尝试的软件GeoGebra,是自由且跨平台的动态数学软件,可覆盖数学学习的各个阶段,包含了几何、代数、表格、图形、统计和微积分,非常便于使用。
程序员小助手
2020/04/08
1.1K0
【MATLAB】数值运算 ( 数值运算示例 | 三角函数 | 指数运算 | 对数运算 | 常用的数学公式对应函数 )
函数 : https://ww2.mathworks.cn/help/matlab/ref/sin.html
韩曙亮
2023/03/29
2.5K0
【MATLAB】数值运算 ( 数值运算示例 | 三角函数 | 指数运算 | 对数运算 | 常用的数学公式对应函数 )
【算法】奇数值单元格的数目
输入:m = 2, n = 3, indices = [[0,1],[1,1]] 输出:6 解释:最开始的矩阵是 [[0,0,0],[0,0,0]]。 第一次增量操作后得到 [[1,2,1],[0,1,0]]。 最后的矩阵是 [[1,3,1],[1,3,1]],里面有 6 个奇数。
lomtom
2022/11/11
2990
【算法】奇数值单元格的数目
算法集锦(21) | 自动驾驶 |汽车转向角控制算法
自从十多前年Darpa的Grand Challenge竞赛开始,自动驾驶汽车技术不断得以发展,尤其近年来随着深度学习技术的出现,技术进步越来越快。自动驾驶汽车的组成部分有很多,其中最关键的是传感器和驱动它们的AI系统。随着计算能力的不断增强,新兴的深度学习网络可以对路况细节、可视视野和遥测数据进行很好的学习,有望成为自动驾驶汽车强大的“大脑”,用来理解路况、环境及对车辆运行进行决策。
用户7623498
2020/08/04
2.1K0
算法集锦(21) | 自动驾驶 |汽车转向角控制算法
算法__数字三角形
#include<iostream> using namespace std; int main() { int n,i,j,a[101][101]; cin>>n; for (i=1;i<=n;i++) for (j=1;j<=i;j++) cin>>a[i][j]; //输入数字三角形的值 for (i=n-1;i>=1;i--) for (j=1;j<=i;j++) { if (a
Twcat_tree
2022/11/29
3220
算法__数字三角形
geotools中泰森多边形的生成
泰森多边形又叫冯洛诺伊图(Voronoi diagram),得名于Georgy Voronoi,是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成。
牛老师讲GIS
2018/10/23
2.1K0
geotools中泰森多边形的生成
排序算法的稳定性及其汇总
举个栗子 我们在做商品展示时候可以做到,用户点击销量时候排一下序展示,用户点击价格时候,用价格排序,相同的价格原来销量在前面的还在前面
名字是乱打的
2022/05/13
2430
排序算法的稳定性及其汇总
玄学优化一个稳定排序算法
前一阵子(还挺前的)正好在忙数据结构的课程设计,大体是要求做一个航班管理系统。程序主体就是简单堆几个高效数据结构,再糊上一个RESTful API,没什么好谈的。不过在优化其中的排序算法时倒是学到了挺多。虽然说本质还是缝合若干优秀算法,但刚好最近也很久没更新博客了,所以干脆写一篇博客简述当时的思路吧。优化思路本身都是拾人牙慧,有错漏还请指出。
KAAAsS
2022/01/14
4780
玄学优化一个稳定排序算法
LARS回归算法的几何意义
Efron于2004年发表在Annals of Statistics的文章LEAST ANGLE REGRESSION中提出LARS算法,其核心思想是提出一种新的solution path(求解路径),即在已经入选的变量中,寻找一个新的路径,使得在这个路径上前进时,当前残差与已入选变量的相关系数都是相同的,直到找出新的比当前残差相关系数最大的变量。从几何上来看,当前残差在那些已选入回归集的变量们所构成的空间中的投影,是这些变量的角平分线。
全栈程序员站长
2022/09/07
5610

相似问题

在线更新向量和的数值稳定算法

14

右上三角矩阵的ANSI C-数值稳定后向替换算法

11

单纯形算法的数值稳定性

13

数值稳定softmax

426

数值稳定实现

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文