本文整理汇总了Python中quaternion.Quaternion.copy方法的典型用法代码示例。如果您正苦于以下问题:Python Quaternion.copy方法的具体用法?Python Quaternion.copy怎么用?Python Quaternion.copy使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类quaternion.Quaternion
的用法示例。
在下文中一共展示了Quaternion.copy方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: ArcBall
# 需要导入模块: from quaternion import Quaternion [as 别名]
# 或者: from quaternion.Quaternion import copy [as 别名]
class ArcBall(object):
"""
Class contains ArcBall logic see test_arcball.py for usage
"""
def __init__(self, cx, cy, radius):
"""
Initialize instance of ArcBall with no constraint on axis of rotation
"""
self.center_x = cx
self.center_y = cy
self.radius = radius
self.v_down = PVector()
self.v_drag = PVector()
self.q_now = Quaternion()
self.q_down = Quaternion()
self.q_drag = Quaternion()
self.axis_set = [PVector(1.0, 0.0, 0.0), PVector(0.0, 1.0, 0.0), PVector(0.0, 0.0, 1.0)]
self.axis = -1
def selectAxis(self, axis):
"""
call this from sketch (typically in keyPressed() to constrain rotation to one axis)
valid input 0, 1, 2 or -1
"""
if ((axis == -1) or (axis == 0) or (axis == 1) or (axis == 2)):
self.axis = axis
def __mouse2sphere(self, x, y):
"""
private map mouse to ArcBall (sphere)
"""
v = PVector()
v.x = (x - self.center_x) / self.radius
v.y = (y - self.center_y) / self.radius
mag = v.x * v.x + v.y * v.y
if (mag > 1.0) :
v.normalize()
else:
v.z = sqrt(1.0 - mag)
if (self.axis != -1):
v = self.__constrain(v, self.axis_set[self.axis])
return v
def mousePressed(self, x, y):
"""
pass in mouse.x and mouse.y parameters from sketch
"""
self.v_down = self.__mouse2sphere(x, y)
self.q_down.copy(self.q_now)
self.q_drag.reset()
def mouseDragged(self, x, y):
"""
pass in mouse.x and mouse.y parameters from sketch
"""
self.v_drag = self.__mouse2sphere(x, y)
self.q_drag.set(PVector.dot(self.v_down, self.v_drag), self.v_down.cross(self.v_drag))
def __constrain(self, vector, axis):
"""
private constrain (used to constrain axis)
"""
vector.sub(axis.mult(axis, PVector.dot(axis, vector)))
vector.normalize()
return vector
def update(self):
"""
Call this function in the sketch draw loop to get rotation matrix as an array
"""
self.q_now = Quaternion.mult(self.q_drag, self.q_down)
return self.__quat2matrix(self.q_now)
def __quat2matrix(self, q) :
"""
private return matrix as array
"""
rot = q.getValue()
return rot
示例2: ArcBall
# 需要导入模块: from quaternion import Quaternion [as 别名]
# 或者: from quaternion.Quaternion import copy [as 别名]
class ArcBall(object):
"""
Class for provides intuitive 3d manipulation of sketch object in pyprocessing.
ArcBall class uses Quaternions class for efficient calculation of rotation. Hold down x, y or z
keys to constrain rotation to that plane; otherwise drag mouse for smooth rotation
Written by Martin Prout - see https://github.com/monkstone/pyprocessing-experiments
"""
def __init__(self, cx, cy, radius):
"""
Initialize instance of ArcBall with no constraint on axis of rotation
"""
self.center_x = cx
self.center_y = cy
self.radius = radius
self.v_down = PVector()
self.v_drag = PVector()
self.q_now = Quaternion()
self.q_down = Quaternion()
self.q_drag = Quaternion()
self.axis_set = [PVector(1.0, 0.0, 0.0), PVector(0.0, 1.0, 0.0), PVector(0.0, 0.0, 1.0)]
self.axis = -1
def selectAxis(self, axis):
"""
call this from sketch (typically in keyPressed() to constrain rotation to one axis)
valid input 0, 1, 2 or -1
"""
self.axis = axis
def __mouse2sphere(self, x, y):
"""
private map mouse to ArcBall (sphere)
"""
v = PVector()
v.x = (x - self.center_x) / self.radius
v.y = (y - self.center_y) / self.radius
mag = v.x * v.x + v.y * v.y
if (mag > 1.0) :
v.normalize()
else:
v.z = sqrt(1.0 - mag)
if (self.axis != -1):
v = self.__constrain(v, self.axis_set[self.axis])
return v
def mousePressed(self, x, y):
"""
pass in mouse.x and mouse.y parameters from sketch
"""
self.v_down = self.__mouse2sphere(x, y)
self.q_down.copy(self.q_now)
self.q_drag.reset()
def mouseDragged(self, x, y):
"""
pass in mouse.x and mouse.y parameters from sketch
"""
self.v_drag = self.__mouse2sphere(x, y)
self.q_drag.set(PVector.dot(self.v_down, self.v_drag), self.v_down.cross(self.v_drag))
def __constrain(self, vector, axis):
"""
private constrain (used to constrain axis)
"""
res = PVector.sub(vector, PVector.mult(axis, PVector.dot(axis, vector)))
res.normalize()
return res
def update(self):
"""
Call this function in the sketch draw loop to get rotation matrix as an array
"""
self.q_now = Quaternion.mult(self.q_drag, self.q_down)
return self.__quat2matrix(self.q_now)
def __quat2matrix(self, q) :
"""
private return matrix as array
"""
rot = q.getValue()
return rot