用python操纵曲线

时间:2014-07-01 14:15:14

标签: python math

所以我使用这个python脚本来创建你在图像中看到的曲线。我没有详细介绍这个问题的实际用法,而是:

- 有没有办法创建没有线性值的蓝色和黄色曲线(红色曲线)?基于蓝线“公式”( sin(x * 90 * pi / 180)

- 此外,我是否真的需要创建一个for循环并像我在脚本中那样追加值,或者是否有更“干净”的方法在一行中创建值数组?

最后,我只想确保凭借我对数学和python的有限知识,我并没有让它变得比它需要的更复杂。谢谢。

curves

### RED CURVE ###

linearValues = []

for i in range(0,91):
    linearValues.append( float(  float(i)/float(90) ) )

linearValues.reverse()



### BLUE CURVE ###

blueCurveValues = []

for i in range(0,91):
    blueCurveValues.append( math.sin(linearValues[i]*90*math.pi/180) )



### YELLOW CURVE ###

yellowCurveValues = []

for i in range(0,91):
    yellowCurveValues.append( float( linearValues[i]-(blueCurveValues[i]-linearValues[i]) ) )    

1 个答案:

答案 0 :(得分:1)

在Python 2中,你应该在分割之前将int转换为float s(如果你不想要整数除法)。然后,当你分割两个int时,你只需要演员,这只发生在linearValues上(你只需要float(i)/90i/float(90),而不是三个from __future__ import division铸)。但是在Python 3中(或使用float),这是自动完成的,您不需要对linearValues = [ i/90 for i in range(90,-1,-1) ] blueCurveValues = [ math.sin(linearValues[i]*90*math.pi/180) for i in range(91) ] yellowCurveValues = [ linearValues[i]-(blueCurvevalues[i]-linearValues[i] for i in range(91) ] 进行任何调用。我删除了它们。

用于创建列表的Pythonic方式称为“列表理解”。准确翻译你写的内容,这将是:

linearValues[i]

如果您不想计算linearValues,那么显而易见的事情就是每次只用i/90替换90*math.pi/180。这将简化您的蓝色值公式,但只是略微使您的黄色。至少,您可以考虑将math.pi/2更改为(i/90*90*math.pi/180)(或(i*math.pi/180)更改为map)。但这仍然是在引擎盖下使用红色曲线。

创建列表的另一个选项是linearValues = map(lambda x:x/90,range(90,-1,-1)) blueCurveValues = map(lambda x:math.sin(x*90*math.pi/180),linearValues) yellowCurveValues = map(lambda x,y:x-(y-x),linearValues,blueCurveValues)

map

lambda和{{1}}通常比列表理解更难阅读,但更短的公式通常更容易。所以红色应该是列表理解。蓝色和黄色取决于您的偏好。