mirror of
https://github.com/wassname/simpeg.git
synced 2026-06-27 22:08:38 +08:00
make sure subtraction of x0 is a matrix with length of number of points, add test for giving an array XYZ
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import numpy as np
|
||||
from SimPEG.Utils import mkvc
|
||||
|
||||
def rotationMatrixFromNormals(v0,v1,tol=1e-20):
|
||||
"""
|
||||
@@ -56,4 +57,6 @@ def rotatePointsFromNormals(XYZ,n0,n1,x0=np.r_[0.,0.,0.]):
|
||||
assert XYZ.shape[1] == 3, "Grid XYZ should be 3 wide"
|
||||
assert len(x0) == 3, "x0 should have length 3"
|
||||
|
||||
return (XYZ - x0).dot(R.T) + x0
|
||||
X0 = np.ones([XYZ.shape[0],1])*mkvc(x0)
|
||||
|
||||
return (XYZ - X0).dot(R.T) + X0 # equivalent to (R*(XYZ - X0)).T + X0
|
||||
@@ -23,7 +23,22 @@ class coorUtilsTest(unittest.TestCase):
|
||||
v1 = np.random.rand(3)
|
||||
v1*= 1./np.linalg.norm(v1)
|
||||
|
||||
self.assertTrue(np.linalg.norm(Utils.mkvc(Utils.coordutils.rotatePointsFromNormals(Utils.mkvc(v0,2).T,v0,v1))-v1) < tol)
|
||||
v2 = Utils.mkvc(Utils.coordutils.rotatePointsFromNormals(Utils.mkvc(v0,2).T,v0,v1))
|
||||
|
||||
self.assertTrue(np.linalg.norm(v2-v1) < tol)
|
||||
|
||||
def test_rotateMatrixFromNormals(self):
|
||||
n0 = np.random.rand(3)
|
||||
n0*= 1./np.linalg.norm(n0)
|
||||
n1 = np.random.rand(3)
|
||||
n1*= 1./np.linalg.norm(n1)
|
||||
|
||||
scale = np.random.rand(100,1)
|
||||
XYZ0 = scale * n0
|
||||
XYZ1 = scale * n1
|
||||
|
||||
XYZ2 = Utils.coordutils.rotatePointsFromNormals(XYZ0,n0,n1)
|
||||
self.assertTrue(np.linalg.norm(Utils.mkvc(XYZ1) - Utils.mkvc(XYZ2))/np.linalg.norm(Utils.mkvc(XYZ1)) < tol)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user