设为首页 收藏本站
查看: 545|回复: 0

[经验分享] normalize a vector with python (Maya)

[复制链接]

尚未签到

发表于 2017-4-28 10:04:41 | 显示全部楼层 |阅读模式
在maya中有个normalize命令用来normalize一个大小为3的浮点数组,而没有python版的normalize命令,python本身也没有处理Vector的内建函数,所以只有自己去实现。
  在maya中可以有以下方法来实现normalize。
  为了对比mel版本的normalize命令,我先给出mel版本的样例。
  在maya中创建一个locator(其它也行),随便移动一下然后执行下面的代码
float $locPos[] = `getAttr locator1.translate`;
// Result: -6.743036 3.618447 2.797823 //
normalize($locPos);
print $locPos;
// Result:
-0.827572
0.444091
0.343376

  纯python实现normalize
def normalize(v=[]):
if len(v) == 3:
length = lambda v: (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) ** 0.5
return ( v[0] / length(v), v[1] / length(v), v[2] / length(v) )
else:
return 0
  在maya中使用
import maya.cmds as mc
locPos = mc.getAttr("locator1.translate")[0]
print(locPos)
# (-6.7430359036937162, 3.6184465390115115, 2.7978227410646745)
normalize(locPos)
# Result: (-0.82757196706231873, 0.44409149866149278, 0.34337644087676383) #
  使用pymel,pymel有Vector类型,其实是继承API的MVector
import pymel.core as pc
loc = pc.PyNode("locator1")
locpos = loc.translate.get()
print(locpos)
# [-6.74303590369, 3.61844653901, 2.79782274106]
type(locpos)
# Result: <class 'pymel.core.datatypes.Vector'> #
locpos.normalize()
print(locpos)
# [-0.827571967062, 0.444091498661, 0.343376440877]
  使用python API
import maya.OpenMaya as om
import maya.cmds as mc
locPos = mc.getAttr("locator1.translate")[0]
print(locPos)
# [-6.74303590369, 3.61844653901, 2.79782274106]
locVet = om.MVector(locPos[0], locPos[1], locPos[2])
locVet.normalize()
norLoc = (locVet.x, locVet.y, locVet.z)
print(norLoc)
# (-0.82757196706231873, 0.44409149866149278, 0.34337644087676383)
希望对你有帮助。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-370258-1-1.html 上篇帖子: 测试douban-python库的oauth 下篇帖子: python中input与raw_input区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表