本文整理匯總了Python中numpy.cross方法的典型用法代碼示例。如果您正苦於以下問題:Python numpy.cross方法的具體用法?Python numpy.cross怎麽用?Python numpy.cross使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類numpy
的用法示例。
在下文中一共展示了numpy.cross方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: set_by_3pts
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def set_by_3pts(self,origin, pt1, pt2):
"""
origin: tuple 3
pt1: tuple 3
pt2: tuple 3
"""
self.origin=origin
vec1 = np.array([pt1[0] - origin[0] , pt1[1] - origin[1] , pt1[2] - origin[2]])
vec2 = np.array([pt2[0] - origin[0] , pt2[1] - origin[1] , pt2[2] - origin[2]])
cos = np.dot(vec1, vec2)/np.linalg.norm(vec1)/np.linalg.norm(vec2)
if cos == 1 or cos == -1:
raise Exception("Three points should not in a line!!")
self.x = vec1/np.linalg.norm(vec1)
z = np.cross(vec1, vec2)
self.z = z/np.linalg.norm(z)
self.y = np.cross(self.z, self.x)
示例2: __init__
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def __init__(self,origin, pt1, pt2, name=None):
"""
origin: 3x1 vector
pt1: 3x1 vector
pt2: 3x1 vector
"""
self.__origin=origin
vec1 = np.array([pt1[0] - origin[0] , pt1[1] - origin[1] , pt1[2] - origin[2]])
vec2 = np.array([pt2[0] - origin[0] , pt2[1] - origin[1] , pt2[2] - origin[2]])
cos = np.dot(vec1, vec2)/np.linalg.norm(vec1)/np.linalg.norm(vec2)
if cos == 1 or cos == -1:
raise Exception("Three points should not in a line!!")
self.__x = vec1/np.linalg.norm(vec1)
z = np.cross(vec1, vec2)
self.__z = z/np.linalg.norm(z)
self.__y = np.cross(self.z, self.x)
self.__name=uuid.uuid1() if name==None else name
示例3: vector_angle
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def vector_angle(u, v, direction=None):
'''
vector_angle(u, v) yields the angle between the two vectors u and v. The optional argument
direction is by default None, which specifies that the smallest possible angle between the
vectors be reported; if the vectors u and v are 2D vectors and direction parameters True and
False specify the clockwise or counter-clockwise directions, respectively; if the vectors are
3D vectors, then direction may be a 3D point that is not in the plane containing u, v, and the
origin, and it specifies around which direction (u x v or v x u) the the counter-clockwise angle
from u to v should be reported (the cross product vector that has a positive dot product with
the direction argument is used as the rotation axis).
'''
if direction is None:
return np.arccos(vector_angle_cos(u, v))
elif direction is True:
return np.arctan2(v[1], v[0]) - np.arctan2(u[1], u[0])
elif direction is False:
return np.arctan2(u[1], u[0]) - np.arctan2(v[1], v[0])
else:
axis1 = normalize(u)
axis2 = normalize(np.cross(u, v))
if np.dot(axis2, direction) < 0:
axis2 = -axis2
return np.arctan2(np.dot(axis2, v), np.dot(axis1, v))
示例4: _retinotopic_field_sign_triangles
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def _retinotopic_field_sign_triangles(m, retinotopy):
t = m.tess if isinstance(m, geo.Mesh) or isinstance(m, geo.Topology) else m
# get the polar angle and eccen data as a complex number in degrees
if pimms.is_str(retinotopy):
(x,y) = as_retinotopy(retinotopy_data(m, retinotopy), 'geographical')
elif retinotopy is Ellipsis:
(x,y) = as_retinotopy(retinotopy_data(m, 'any'), 'geographical')
else:
(x,y) = as_retinotopy(retinotopy, 'geographical')
# Okay, now we want to make some coordinates...
coords = np.asarray([x, y])
us = coords[:, t.indexed_faces[1]] - coords[:, t.indexed_faces[0]]
vs = coords[:, t.indexed_faces[2]] - coords[:, t.indexed_faces[0]]
(us,vs) = [np.concatenate((xs, np.full((1, t.face_count), 0.0))) for xs in [us,vs]]
xs = np.cross(us, vs, axis=0)[2]
xs[np.isclose(xs, 0)] = 0
return np.sign(xs)
示例5: rotate_camera_to_point_at
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def rotate_camera_to_point_at(up_from, lookat_from, up_to, lookat_to):
inputs = [up_from, lookat_from, up_to, lookat_to]
for i in range(4):
inputs[i] = normalize(np.array(inputs[i]).reshape((-1,)))
up_from, lookat_from, up_to, lookat_to = inputs
r1 = r_between(lookat_from, lookat_to)
new_x = np.dot(r1, np.array([1, 0, 0]).reshape((-1, 1))).reshape((-1))
to_x = normalize(np.cross(lookat_to, up_to))
angle = np.arccos(np.dot(new_x, to_x))
if angle > ANGLE_EPS:
if angle < np.pi - ANGLE_EPS:
ax = normalize(np.cross(new_x, to_x))
flip = np.dot(lookat_to, ax)
if flip > 0:
r2 = get_r_matrix(lookat_to, angle)
elif flip < 0:
r2 = get_r_matrix(lookat_to, -1. * angle)
else:
# Angle of rotation is too close to 180 degrees, direction of rotation
# does not matter.
r2 = get_r_matrix(lookat_to, angle)
else:
r2 = np.eye(3)
return np.dot(r2, r1)
示例6: calculate_camera_variables
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def calculate_camera_variables(eye, lookat, up, fov, aspect_ratio, fov_is_vertical=False):
import numpy as np
import math
W = np.array(lookat) - np.array(eye)
wlen = np.linalg.norm(W)
U = np.cross(W, np.array(up))
U /= np.linalg.norm(U)
V = np.cross(U, W)
V /= np.linalg.norm(V)
if fov_is_vertical:
vlen = wlen * math.tan(0.5 * fov * math.pi / 180.0)
V *= vlen
ulen = vlen * aspect_ratio
U *= ulen
else:
ulen = wlen * math.tan(0.5 * fov * math.pi / 180.0)
U *= ulen
vlen = ulen * aspect_ratio
V *= vlen
return U, V, W
示例7: update_normals
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def update_normals(self):
v0 = self.vectors[:, 0, :3]
v1 = self.vectors[:, 1, :3]
v2 = self.vectors[:, 2, :3]
_normals = numpy.cross(v1 - v0, v2 - v0)
for i in range(len(_normals)):
norm = numpy.linalg.norm(_normals[i])
if norm != 0:
_normals[i] /= numpy.linalg.norm(_normals[i])
self.normals[:] = _normals
return self
#####################################################################
# Analyze functions
#
示例8: transform
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def transform(x_vec, z_vec):
'''
Construct a transformation matrix to transform r_vec to the new coordinate system defined by x_vec and z_vec
'''
x_vec = x_vec/np.linalg.norm(np.asarray(x_vec))
z_vec = z_vec/np.linalg.norm(np.asarray(z_vec))
assert x_vec.dot(z_vec) == 0
y_vec = np.cross(x_vec,z_vec)
new = np.asarray([x_vec, y_vec, z_vec])
original = np.asarray([[1,0,0],[0,1,0],[0,0,1]])
tran_matrix = np.empty([3,3])
for row in range(3):
for col in range(3):
tran_matrix[row,col] = np.cos(angle(original[row],new[col]))
return tran_matrix.T
示例9: __init__
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def __init__(self, **kw):
"""
Constructor of affine, equidistant 3d mesh class
ucell : unit cell vectors (in coordinate space)
Ecut : Energy cutoff to parametrize the discretization
"""
from scipy.fftpack import next_fast_len
self.ucell = kw['ucell'] if 'ucell' in kw else 30.0*np.eye(3) # Not even unit cells vectors are required by default
self.Ecut = Ecut = kw['Ecut'] if 'Ecut' in kw else 50.0 # 50.0 Hartree by default
luc = np.sqrt(np.einsum('ix,ix->i', self.ucell, self.ucell))
self.shape = nn = np.array([next_fast_len( int(np.rint(l * np.sqrt(Ecut)/2))) for l in luc], dtype=int)
self.size = np.prod(self.shape)
gc = self.ucell/(nn) # This is probable the best for finite systems, for PBC use nn, not (nn-1)
self.dv = np.abs(np.dot(gc[0], np.cross(gc[1], gc[2] )))
rr = [np.array([gc[i]*j for j in range(nn[i])]) for i in range(3)]
self.rr = rr
self.origin = kw['origin'] if 'origin' in kw else np.zeros(3)
示例10: slice_normal
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def slice_normal(self):
#The std_slice_normal comes from the cross product of the directions
#in the ImageOrientationPatient
std_slice_normal = super(SiemensWrapper, self).slice_normal
csa_slice_normal = csar.get_slice_normal(self.csa_header)
if std_slice_normal is None and csa_slice_normal is None:
return None
elif std_slice_normal is None:
return np.array(csa_slice_normal)
elif csa_slice_normal is None:
return std_slice_normal
else:
#Make sure the two normals are very close to parallel unit vectors
dot_prod = np.dot(csa_slice_normal, std_slice_normal)
assert np.allclose(np.fabs(dot_prod), 1.0, atol=1e-5)
#Use the slice normal computed with the cross product as it will
#always be the most orthogonal, but take the sign from the CSA
#slice normal
if dot_prod < 0:
return -std_slice_normal
else:
return std_slice_normal
示例11: _calculate_dadt_ccd
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def _calculate_dadt_ccd(msh, ccd_file, coil_matrix, didt, geo_fn):
""" auxiliary function to calculate the dA/dt field from a ccd file """
# read ccd file
d_position, d_moment = read_ccd(ccd_file)
# transfrom positions to mm
d_position *= 1e3
# add a column to the position in order to apply the transformation matrix
d_position = np.hstack([d_position, np.ones((d_position.shape[0], 1))])
d_position = coil_matrix.dot(d_position.T).T[:, :3]
# rotate the moment
d_moment = coil_matrix[:3, :3].dot(d_moment.T).T
A = np.zeros((msh.nodes.nr, 3), dtype=float)
for p, m in zip(d_position, d_moment):
# get distance of point to dipole, transform back to meters
r = (msh.nodes.node_coord - p) * 1e-3
A += 1e-7 * didt * np.cross(m, r) / (np.linalg.norm(r, axis=1)[:, None] ** 3)
node_data = mesh_io.NodeData(A)
if geo_fn is not None:
mesh_io.write_geo_spheres(d_position, geo_fn,
np.linalg.norm(d_moment, axis=1),
'coil_dipoles')
return node_data
示例12: tms_sphere
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def tms_sphere(sphere3_msh):
m = sphere3_msh.crop_mesh(elm_type=4)
dipole_pos = np.array([0., 0., 300])
dipole_moment = np.array([1., 0., 0.])
didt = 1e6
r = (m.nodes.node_coord - dipole_pos) * 1e-3
dAdt = 1e-7 * didt * np.cross(dipole_moment, r) / (np.linalg.norm(r, axis=1)[:, None] ** 3)
dAdt = mesh_io.NodeData(dAdt, mesh=m)
dAdt.field_name = 'dAdt'
dAdt.mesh = m
pos = m.elements_baricenters().value
E_analytical = analytical_solutions.tms_E_field(dipole_pos * 1e-3,
dipole_moment, didt,
pos * 1e-3)
cond = mesh_io.ElementData(np.ones(m.elm.nr))
cond.mesh = m
return m, cond, dAdt, E_analytical
示例13: camera_info
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def camera_info(param):
theta = np.deg2rad(param[0])
phi = np.deg2rad(param[1])
camY = param[3] * np.sin(phi)
temp = param[3] * np.cos(phi)
camX = temp * np.cos(theta)
camZ = temp * np.sin(theta)
cam_pos = np.array([camX, camY, camZ])
axisZ = cam_pos.copy()
axisY = np.array([0, 1, 0], dtype=np.float32)
axisX = np.cross(axisY, axisZ)
axisY = np.cross(axisZ, axisX)
# cam_mat = np.array([axisX, axisY, axisZ])
cam_mat = np.array([unit(axisX), unit(axisY), unit(axisZ)])
return cam_mat, cam_pos
#####################################################
示例14: shear_matrix
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def shear_matrix(angle, direction, point, normal):
"""Return matrix to shear by angle along direction vector on shear plane.
The shear plane is defined by a point and normal vector. The direction
vector must be orthogonal to the plane's normal vector.
A point P is transformed by the shear matrix into P" such that
the vector P-P" is parallel to the direction vector and its extent is
given by the angle of P-P'-P", where P' is the orthogonal projection
of P onto the shear plane.
>>> angle = (random.random() - 0.5) * 4*math.pi
>>> direct = numpy.random.random(3) - 0.5
>>> point = numpy.random.random(3) - 0.5
>>> normal = numpy.cross(direct, numpy.random.random(3))
>>> S = shear_matrix(angle, direct, point, normal)
>>> numpy.allclose(1.0, numpy.linalg.det(S))
True
"""
normal = unit_vector(normal[:3])
direction = unit_vector(direction[:3])
if abs(numpy.dot(normal, direction)) > 1e-6:
raise ValueError("direction and normal vectors are not orthogonal")
angle = math.tan(angle)
M = numpy.identity(4)
M[:3, :3] += angle * numpy.outer(direction, normal)
M[:3, 3] = -angle * numpy.dot(point[:3], normal) * direction
return M
示例15: mesh_adjust_winding_order
# 需要導入模塊: import numpy [as 別名]
# 或者: from numpy import cross [as 別名]
def mesh_adjust_winding_order(verts, faces, normals):
n0 = normals[faces[:,0]]
n1 = normals[faces[:,1]]
n2 = normals[faces[:,2]]
fnormals = (n0 + n1 + n2) / 3
v0 = verts[faces[:,0]]
v1 = verts[faces[:,1]]
v2 = verts[faces[:,2]]
e0 = v1 - v0
e1 = v2 - v0
fn = np.cross(e0, e1)
dot = np.sum(fnormals * fn, axis=1)
ma = dot < 0
nfaces = faces.copy()
nfaces[ma,1], nfaces[ma,2] = nfaces[ma,2], nfaces[ma,1]
return nfaces