首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随时间倾斜Joystick值

随时间倾斜Joystick值
EN

Stack Overflow用户
提问于 2015-02-16 05:34:59
回答 1查看 557关注 0票数 0

我有一个python脚本,它通过游戏读取操纵杆的输入信号,并将输入传递给电机控制器。

现在我想添加一个倾斜函数。比方说,在给定延迟的情况下,增加到输入值。如果操纵杆的输入是'100‘,它只应在延迟过去后将该值传递给电机控制器,并在两者之间“淡出”。

此外,这将是一个有利的定义坡道。(线性或对数曲线)

有什么简单的方法吗?谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-16 09:11:06

一个简单的类可能如下所示:

代码语言:javascript
复制
class RampUp:
    def __init__(self):
        self.value = 0
        self.target = 0
        self.next = self.__next__
        self.calc = None

    def __iter__(self):
        return self

    def __next__(self):
        if self.value == self.target:
            return self.value
        else:
            self.value = self.calc(self.value, self.target)
            return self.value 

这个类只保存一个状态,是可迭代的,并调用一个函数,该函数在每次迭代中计算一个新值。

一个简单的“斜坡”函数(只需将输出值增加一个给定的增量)可以是:

代码语言:javascript
复制
def simple(value, target):
    if value < target:
        value = min(value + 1, target)
    else:
        value = max(value - 1, target)
    return value

使用示例:

代码语言:javascript
复制
gen = RampUp()
gen.calc = simple
gen.target = 20
for _ in xrange(100):
    # that's the value you pass to your motor controller
    print next(gen)

另一个更复杂的斜坡函数示例:

代码语言:javascript
复制
def smooth(value, target):
    # maximum acceleration is 2
    delta_max = 2
    # minimun acceleration is 0.5
    delta = max(0.5, (abs(target) - abs(target-value)) / 10.)
    delta = min(delta, delta_max)
    if value < target:
        value = min(value + delta, target)
    else:
        value = max(value - delta, target)
    return value

在回应你的评论时:

代码语言:javascript
复制
def with_step(step):            
    def simple(value, target):
        if value < target:
            value = min(value + step, target)
        else:
            value = max(value - step, target)
        return value            
    return simple

gen = RampUp()
gen.target = 20
# you could move this line into the class
# reaches the target value in 12 steps
gen.calc = with_step((gen.target - gen.value)/12.)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28535114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档