zoukankan      html  css  js  c++  java
  • 关于计算的退化

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

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

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

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

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

    这样注意到一句代码:

    aspect = width / height;

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

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

    aspect = (float)width / height;

    观察效果,已然正常!

  • 相关阅读:
    MapReduce中压缩的使用体验
    weblogic 12安装及和Eclipse的整合
    常用正则表达式补充1
    C# 中利用 Conditional 定义条件方法
    金额文本框
    C#中的List<string>泛型类示例
    HTML ID和Name属性的区别
    CSS的position:fixed的使用
    C# 匿名方法和Lambda表达式
    C#设置开机启动程序
  • 原文地址:https://www.cnblogs.com/ice-arrow/p/13042537.html
Copyright © 2011-2022 走看看