首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vpython中齿轮对象的偏航旋转

vpython中齿轮对象的偏航旋转
EN

Stack Overflow用户
提问于 2022-01-09 03:27:16
回答 1查看 70关注 0票数 0

我想知道在vpython中如何使齿轮物体偏转成Y轴.我一直遵循一些教程,我已经设法旋转齿轮。在vpython中,齿轮绕Z轴旋转。我希望齿轮保持Z轴旋转,但我想使齿轮偏转Y轴。当xxx.rotate(axis=vector(0,0,1) )时,它可以正常工作。一旦我改变了任何事情,它就会疯狂。我不知道xxx.rotate(原产地)意味着什么。在我的例子中,我混淆了原点向量,但这对我来说没有任何意义。我不确定原点向量是否期望x,y,z或其他序列中的参数值。我希望我说得通。

下面的代码是一个工作代码,您可以看到我在这里要做的事情。我已经调试了一段时间了,所以请忽略不必要的评论。

代码语言:javascript
运行
复制
# https://www.youtube.com/watch?v=0Sw8sxsN984
# https://www.youtube.com/watch?v=MJiVtz4Uj7M

from vpython import *
import numpy as np

axisOpac = 0.4

def makeAxes(length):
    
    global axes

    xaxis = arrow(pos=vector(0, 0, 0), axis=length*vector(1,0,0), shaftwidth = 0.1*(length), color=color.red, opacity = axisOpac)
    negXaxis = xaxis.clone()
    negXaxis.axis *= -1

    yaxis = arrow(pos=vector(0, 0, 0), axis=length*vector(0,1,0), color=color.green, opacity = axisOpac)
    negYaxis = yaxis.clone()
    negYaxis.axis *= -1

    zaxis = arrow(pos=vector(0, 0, 0), axis=length*vector(0,0,1), color=color.magenta, opacity = axisOpac)
    negZaxis = zaxis.clone()
    negZaxis.axis *= -1    

    fudge = 0.01*length
    xlabel = label(text = "x", color = xaxis.color, pos=xaxis.axis+vector(0, fudge, 0),box = False)
    ylabel = label(text = "y", color = yaxis.color, pos=yaxis.axis+vector(0, fudge, 0),box = False)
    zlabel = label(text = "-z", color = zaxis.color, pos=zaxis.axis+vector(0, fudge, 0),box = False)
    
    # To make axes visible or invisible
    axes = [xaxis, negXaxis, yaxis, negYaxis, zaxis, negZaxis, xlabel, ylabel, zlabel]

    return

makeAxes(1)

g = shapes.gear(n = 20)

gear1 = extrusion (path = [vector(0, 0, 0), vector(0, 0, 0.1)], shape=g, opacity = 0.4)
# gear1.axis = vector(0, 0, 0)

debugArrow=arrow(length=6,shaftwidth=.1,color=color.white,axis=vector(0,0,0))
gearAxisArrow=arrow(shaftwidth=.1, color=color.red)

inputYawAngleYaxis = 0 # int(input("Enter an angle: "))

while True:
    for cir in np.arange(0, 2*np.pi, 0.01):
        rate(10)
        # sleep(1)

        pitch=0
        # k = vector(cos(yaw)*cos(pitch), sin(pitch),sin(yaw)*cos(pitch))  ''' with pitch input '''
        k = vector(cos(cir), 0 ,sin(cir))  # ''' without pitch input '''
        y=vector(0,0,0)
        s=cross(k,y)
        v=cross(s,k)



        rad = radians(45)
        # gear1.axis = vector(1.23, -1.77418, 0) #vector(cos(inputYawAngleYaxis * pi/180), sin(pitch),sin(inputYawAngleYaxis* pi/180)*cos(pitch))
        # gear1.pos = vector(-2.94957, 0, 2.70185)
        
        # Gear Pos0:  <0.707107, 0, 0.707107>  Gear Axis0:  <2.15647, 0.101243, -0.00237659>
        gear1.pos = vector(0.707107, 0, 0.707107)
        # gear1.pos =  debugArrow.axis #frontArrow.axis # k # vector(0.707107, 0, 0.707107)
        gear1.rotate(angle = -0.1, axis = vector(0, 0, 1), origin = vector(0, 0, 1 ))
        # gear1.axis = vector(cos(radians(-45)), 0, sin(radians(-45))) 

        ''' DebugArrow represents the position of the gear's center '''
        debugArrow.axis = vector(cos(rad), 0, sin(rad))


        ''' Arrow inside the gear to track rotational axis of gear - This is to debug the yaw issue facing with gear object'''
        gearAxisArrow.pos = gear1.pos
        gearAxisArrow.axis = gear1.axis # vector(cos(radians(-45)), 0, sin(radians(-45))) # gear1.axis
        gearAxisArrow.length = gear1.length/2
        
            ## Debugg 
        # print("Front Arrow Axis: ", frontArrow.axis, " K vec: ", k, " Ball pos: ", ball.pos )
        print("Gear Pos0: ", gear1.pos, " Gear Axis0: ", gear1.axis, "gearAxisArrow: ", gearAxisArrow.pos, "gearAxisArrow: ", gearAxisArrow.axis)

EN

回答 1

Stack Overflow用户

发布于 2022-01-15 18:12:00

我不明白“我希望齿轮保持围绕Z轴旋转,但我想偏航齿轮围绕Y轴”。如果你所说的“偏航”是指齿轮的轴应该绕y轴旋转(而齿轮本身绕着那个旋转轴旋转),那么很明显,齿轮的轴不能停留在z轴的方向上。相反,齿轮的轴必须旋转。如果有任何帮助,这里是文档的相关页面:

https://www.glowscript.org/docs/VPythonDocs/rotation.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70638207

复制
相关文章

相似问题

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