Source code for svcco.branch_addition.basis

import numba as nb
import numpy as np

[docs]@nb.jit(nopython=True,cache=True,nogil=True) def basis(data, edges): data[edges, 12:15] = (data[edges, 3:6] - data[edges, 0:3]) / np.linalg.norm(data[edges, 3:6] - data[edges, 0:3]) if data[edges, 14] == -1: data[edges, 6:9] = np.array([-1,0,0]) data[edges, 9:12] = np.array([0,-1,0]) else: data[edges, 6:9] = np.array([1-data[edges, 12]**2/(1+data[edges, 14]), (-data[edges, 12]*data[edges, 13])/(1+data[edges, 14]), -data[edges, 12]]) data[edges, 9:12] = np.array([(-data[edges, 12]*data[edges, 13])/(1+data[edges, 14]), 1 - data[edges, 13]**2/(1+data[edges, 14]), -data[edges, 13]])
[docs]def tangent_basis(normal,pt): normal = normal/np.linalg.norm(normal) p = np.random.random(3) r = (p - pt)/np.linalg.norm(p - pt) t1 = r - np.dot(r,normal)*normal t1 = t1/np.linalg.norm(t1) t2 = np.cross(t1.T,normal) return t1.reshape(1,-1),t2.reshape(1,-1),normal