我怎么能用向量来达到同样的效果呢

2024-04-25 08:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在做了大量工作之后,我用Python开发了以下代码来绘制一个向量[在本例中是(2,2,2)],以便它指向您期望的原点方向。 我花了一些时间收集了三个旋转参数在横摇、俯仰和偏航方面的含义。可能需要设置Euler XYZ。在

我用了一个细长的圆柱体作为我的矢量,这符合我的目的,也符合我对搅拌机的经验。这段代码绘制了一个半路上带有箭头(圆锥体)的向量,非常适合我的目的,但有点像是个预兆。 我适用于大多数向量,但在x<;0和y>;0和z>;0时失败

import bpy
import math
from math import *
x=-5  
y=-10
z=12
yParameter=-1.0
if y < 0:
    if x < 0: 
        yParameter = 1.0
#print ("y para is ",yParameter
for i in range (0,1):

    length=sqrt(z*z+y*y+x*x)


#Create a vector at correct orientation at the origin
bpy.ops.mesh.primitive_cylinder_add(vertices=16, radius=0.04, depth=length, end_fill_type='NGON', view_align=False, enter_editmode=False, location=(0,0,0),rotation=(-acos(z/sqrt(x*x+y*y+z*z)),0,yParameter*acos(y/sqrt(x*x+y*y))))
bpy.ops.transform.translate(value=(x/2, y/2, z/2))

bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0.1, radius2=0, depth=0.4, end_fill_type='NGON', view_align=False, enter_editmode=False, location=(0,0,0), rotation=(-acos(z/sqrt(x*x+y*y+z*z)),0,yParameter*acos(y/sqrt(x*x+y*y))))

在bpy.ops.转换.translate(值=(x/2,y/2,z/2))

我确信向量和矩阵操作中巨大的API应该会使这项工作更容易,但我正在努力寻找如何做这项工作,而不是用这项自主开发的笛卡尔工作。在

有谁能告诉我一个可以理解的代码片段或者一个关于如何在blender python中操作向量(在数学意义上)的教程吗

我发现blender API对参数的名称和如何编码非常清楚,但是对于参数的实际含义我几乎找不到或什么也找不到。在


Tags: 代码importgt目的false参数绘制math
1条回答
网友
1楼 · 发布于 2024-04-25 08:20:50

这将创建一个一端为(0,0,0),另一端为(x,y,z)的圆柱体:

def createVectorLikeThing(x,y,z):
    v = Vector((x,y,z))
    up = Vector((0,0,1))
    if v!=-up:
        rot = up.rotation_difference(v)
    else:
        rot = Quaternion((1,0,0),pi)
    bpy.ops.mesh.primitive_cylinder_add(vertices=16, radius=0.01, depth=v.length, end_fill_type='NGON', view_align=False, enter_editmode=True)
    bpy.ops.transform.translate(value=(0,0,v.length/2))
    bpy.ops.object.editmode_toggle()
    bpy.ops.transform.rotate(value=(rot.angle,), axis=rot.axis)

该代码适用于blender 2.63,但对于2.65,不是。在

对于2.65,将最后一行改为:

^{pr2}$

相关问题 更多 >