SketchUp8.0在组件属性的函数里增加了Power函数(幂函数),这解决了当初玩儿动态组件想达到一个数的N次幂必须得在公式里把这个数乘N遍的尴尬局面。
最近在使用这个函数的时候发现这个函数在SketchUp里的不足,不能对负数进行开方运算(幂为分数),接下来对这个函数进行了扩展;由于个人能力有限,只能解决 负数的开整数方根 这个方面,希望官方在后期的SketchUp版本中能优化这个函数;
首先说明一下Power函数:
函数表达式为Power(base,power),base为基数,power为幂;
如:Power(2,3),表示2的3次幂,结果为8;
Power(8,1/3),表示8的1/3次幂,也就是8的立方根,结果为2;
这些在SketchUp的组件属性中自定义一个属性并在属性后输入表达式“=Power(base,power)”(不需要引号)可得到验证。
但是,问题来了,当我输入Power(-8,1/3),本以为会得到-2这个结果,谁知道得到的如下
我也是醉了,还以为自己数学没学好,赶紧打开Excel,输入了同样的等式,结果确实是-2;
经过多次测试得出这样一个结论:
组件属性的Power函数不支持对负数进行小数/分数次幂运算;
接下来提出的方案只能解决负数开整数方根的可实施性,也就是对负数进行整数分之一次幂的运算;
Power(base,power)中的Power为1/2,1/3,1/4...
图中Result后的表达式即为解决方案;
以下为解释说明;
我把基数分为两种情况,base大于等于0,base小于0;
当base大于等于0,则base的root分之一次幂等于,表达式为Power(abs(base),1/root);
注:abs()为绝对值运算,因为base为负数时结果不对;
当base小于0,又分为两种情况,root为奇数还是偶数;
1.我们知道负数没有偶数方根,所以root为偶数时,我输入了“FalseNum”;
2.root为奇数时,相当于基数base的绝对值的root分之一次幂*-1;
中间利用到的函数列举如下,具体用法及定义可在网上查询
IF(test,thenValue,elseValue),逻辑函数,判定函数;
ABS(number),绝对值转换;
ISEVEN(number),偶数判断;或用ISODD(number),奇数判断;
|
|