zoukankan      html  css  js  c++  java
  • 看看样条插值区间查找函数写的多细腻

        优秀的程序猿不仅要有深厚理论基础,更要有缜密的思维, 一个简单的函数, 有非常多人都写不好,为什么,

        不是做不到,不是想不到,  往往是因为懒而不愿意深入思考.  有句话叫, 天下大事, 必做于细.


        int Spline::findTimeInterval(Number time, int startIndex)

        {
             int length = this->_times.size();
             if (time < this->_times[0] || time > this->_times[length - 1])
             {
                  throw  DeveloperError("time is out of range.");
             }

             if (startIndex < 0 || startIndex > length-1)
             {
                 throw DeveloperError("length is out of range.");
             }

              // Take advantage of temporal coherence by checking current, next and previous intervals
              // for containment of time.
              if (time >= this->_times[startIndex])
              {
                  if (startIndex + 1 < length && time < this->_times[startIndex + 1])
                  {
                      return startIndex;
                  }
                  else if (startIndex + 2 < length && time < this->_times[startIndex + 2])
                  {
                      return startIndex + 1;
                  }
              }
              else if (startIndex - 1 >= 0 && time >= this->_times[startIndex - 1])
              {
                  return startIndex - 1;
              }

              // The above failed so do a linear search. For the use cases so far, the
              // length of the list is less than 10. In the future, if there is a bottle neck,
              // it might be here.

              int i;
              if (time > this->_times[startIndex])
              {
                  for (i = startIndex; i < length - 1; ++i) {
                      if (time >= this->_times[i] && time < this->_times[i + 1]) {
                          break;
                      }
                  }
              } else {
                  for (i = startIndex - 1; i >= 0; --i) {
                      if (time >= this->_times[i] && time < this->_times[i + 1]) {
                          break;
                      }
                  }
              }

              if (i == length - 1) {
                  i = length - 2;
              }

              return i;
        }
  • 相关阅读:
    使用VMware Workstation安装win7镜像文件时遇见的错误
    每次启动懂maven项目都必须关闭javaw.exe进程
    laravel excel导出调节列宽度,对某列中数据颜色处理
    三个<li>元素放一行
    php中bootstrap框架.popover弹出框,鼠标移动到上面自动显示,离开自动消失
    锚点,自动跳转到某处
    WdatePicker控件Javascript取得当前时间、取得减30分钟时间
    (mysql数据库报错)The user specified as a definer ('root'@'%') does not exist
    c# tcp协议发送数据
    c# 键值对的方式post提交
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6875370.html
Copyright © 2011-2022 走看看