ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 我如何使用向量来实现与此相同

2019-07-03 23:43:39  阅读:141  来源: 互联网

标签:python python-3-x blender


经过大量工作后,我在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.transform.translate(value =(x / 2,y / 2,z / 2))

我确信向量和矩阵操作中的巨大API应该使这项工作更容易,但我正在努力寻找除了这个自行开发的笛卡尔工作以外的方法.

任何人都可以指向一个可理解的代码片段或者可能是关于如何在blender python中操纵向量(在数学意义上)的教程

我发现blender API非常清楚参数的名称以及如何对它们进行编码,但我发现参数的实际含义很少甚至没有.

解决方法:

这将创建一个圆柱体,其中(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)

该代码适用于搅拌机2.63但不适用于2.65.

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

    bpy.ops.transform.rotate(value=rot.angle, axis=rot.axis)

标签:python,python-3-x,blender
来源: https://codeday.me/bug/20190703/1371498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有