给定一个实数(n),这个实数可以是(上)的最大值,这个实数可以是(更低)的最小值,我们怎样才能最有效地剪切n,使它保持在低位和高位之间?
当然,使用一堆if语句可以做到这一点,但那很无聊!更紧凑,优雅/有趣的解决方案呢?
我自己的快速尝试(C/C++):
float clip( float n, float lower, float upper )
{
n = ( n > lower ) * n + !( n > lower ) * lower;
return ( n < upper ) * n + !( n < upper ) * upper;
}
Run Code Online (Sandbox Code Playgroud)
我确信还有其他更好的方法可以做到这一点,这就是为什么我把它放在那里......!
我已编程多年了,我现在提出的问题可能是我遇到的最奇怪的问题之一.
我的应用程序中有一段代码随机生成一系列令牌,有三种可能的类型,比如A,B或C.
所以10个代币可能是ABCCAAABAC.
在代码块的开头,随机数生成器种子初始化如下:
math.randomseed(seed)
math.random()
Run Code Online (Sandbox Code Playgroud)
现在,不出所料,当种子值保持不变时,我总是得到相同的令牌序列,因为随机生成代码以确定的方式执行.好吧,几乎总是.
实际上,在极少数情况下,出乎同样的种子,我会得到一个不同的随机序列.然后它在我知道之前恢复正常.你可能在想 - 啊,副作用,这可能是一个状态相关的问题,其中生成随机令牌序列的代码块利用一个变量来改变它调用的次数random()(例如).但是,我99%肯定我控制了所有明显的副作用.代码块中只有少数位置可以访问外部状态,并且它们都保持不变.
情节变得更加浓厚 - 这个问题在我一直在构建的应用程序的Android部署上才显而易见.不可否认,这是一个罕见的错误,我似乎无法可靠地重复它.因此它也可能出现在iOS部署中.但我还没有在其他平台上遇到它.我不妨提一下,我正在通过Corona SDK使用lua脚本来开发应用程序.
我已经多想了这个问题,并将其缩小到几个可能性:
所有这些最痛苦的方面是bug的不可重复性.大多数情况下,代码块在给定重复种子的情况下完全确定.然后就好像存在一个非确定性阶段,然后在一段未知的时间后再次消失.我想在这里挑选一位专家的大脑.
这可能会发生什么?此外 - 由于我在Android部署中只看到了这个特定问题,因此可能会有任何特定于平台的特定问题吗?
作为参考,这是完整的代码块.它实际上生成具有两个随机属性(三种颜色之一,三种形状之一)的标记,但这并不意味着问题的本质.
math.randomseed(currentRandomSeed)
math.random()
local tokenListPlan = {}
-- randomly assign weighting distribution
local thresh1, thresh2
while (true) do
local s0 = math.random(1, 99)
local s1 = math.random(1, 99)
local c0 = s0
local c1 = s1 - c0
local c2 = 100 - c1 - c0
if (c0 >= eng.DEVIATION_THRESHOLD …Run Code Online (Sandbox Code Playgroud) 当我尝试在VC++ 2010调试器中访问向量时,唯一可用的元素是"_M_start","_ M_end"和"_M_end_of_storage".屏幕截图示例如下:

我记得有一段时间后能够访问矢量的实际内容,但很长一段时间情况并非如此(我已经能够忍受它一段时间了).是否有一个特定的设置/功能,我不小心关闭或我完全错过了什么?
我正在尝试从Blender导出(3D)贝塞尔曲线到我的C++程序.我前一段时间问了一个相关的问题,我成功地指示使用De Casteljau的算法沿贝塞尔曲线评估点(和这些点的切线).这很好用.事实上,完美.我可以使用De Casteljau的算法导出曲线并沿着曲线评估点以及这些点的切线.
然而,在3D空间中,沿着贝塞尔曲线的点和该点的切线不足以定义相机可以锁定的"框架",如果这是有意义的话.换句话说,没有"向上矢量",这是在沿曲线的任何点正确指定摄像机方向所需的.从数学上讲,沿着3D贝塞尔曲线的任何点都有无限量的法向量.
我注意到在Blender中构建曲线时,它们不仅仅是无限细线,它们实际上看起来在它们的任何一点都有一个正确的3D方向(如下面截图中的"箭头线"一样).我想在我的程序中尽可能地复制blender所做的事情.也就是说,我希望能够形成一个矩阵,表示沿着3D贝塞尔曲线的任意点的方向(几乎与Blender本身一样).

任何人都可以在这里提供进一步的指导,也许是对Blender源代码有深入了解的人吗?(但是欢迎任何建议,Blender背景与否.)我知道它是开源的,但由于程序的广泛性,我在分离负责这些曲线计算的代码时遇到了很多麻烦.