首页 > 其他 > 详细

关于计算的退化

时间:2020-06-04 15:56:05      阅读:31      评论:0      收藏:0      [点我收藏+]

我们在程度设计时,较少遇到一个计算退化的问题,然而发生时却让人猝不及防。

今天在换算引擎可视角时便遇到了这么一件事,观察代码算法,逻辑上讲没有问题,然而在使用时,效果却奇怪的让人诧异!

据观察,多数引擎使用45度的垂直可视角,于是在计算时常常需要用到tan22.5度这个数值。

在问题出现后,我便重新检视计算逻辑,开始怀疑这个值,还尝试把这个值换成宽高比,还修改过中间算法,结果问题仍然没有解决,甚至更严重。

技术分享图片

试了几次修改后,经过仔细观察分析,结论是:一定是计算过程中,将渲染引擎中的方向,映射到空间计算引擎中时,出现了偏差(因为两个地方物体大小和位置实际上是一致的);即然一个方向上是正确的,说明这个方向上的计算没有问题,另一个方向上换算时倍率出现了问题。

这样注意到一句代码:

aspect = width / height;

很快意识到左值为float类型,而右值均为整形,计算结果必定也是整形,赋值到左式时虽然隐式转换为浮点,然而早已是被截断的整型值再次转换而来,丢失了原来的小数位。

aspect被退化了!,于是只需要将其中一个值强转为浮点,即可将右式计算变为浮点运算,保留原小数部分:

aspect = (float)width / height;

观察效果,已然正常!

关于计算的退化

原文:https://www.cnblogs.com/ice-arrow/p/13042537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!