phd-scripts/JMBBM13b/Orientations.py

35 lines
1.1 KiB
Python

from abaqusConstants import *
from abaqus import *
import random
outFile = open('ori.dat',"w")
random.seed(658468764)
# Generate 'c' direction
for i in range(0,500):
angle1=random.random()*2.*pi
sigma=0.02 # extruded rod
a2=random.normalvariate(1., sigma)
if a2>1.:
a2=1.-(a2-1.)
# a2=acos(random.random()) # homogeneous
angle2=acos(a2)
cx=cos(angle1)*cos(angle2)
cy=sin(angle1)*cos(angle2)
cz=sin(angle2)
# Get Stereo Projection
# sx=cx*(1.-(cz/(1.+cz)))
# sy=cy*(1.-(cz/(1.+cz)))
# Get arbitary normal to C
nx=cos(angle1)*cos(angle2+pi/2.)
ny=sin(angle1)*cos(angle2+pi/2.)
nz=sin(angle2+pi/2.)
# Rotate about random angle
a3=random.random()*2.*pi
xx=nx*(cos(a3)+cx*cx*(1.-cos(a3)))+ny*(cx*cy*(1.-cos(a3))-cz*sin(a3))+nz*(cx*cz*(1.-cos(a3))+cy*sin(a3))
xy=nx*(cx*cy*(1.-cos(a3))+cz*sin(a3))+ny*(cos(a3)+cy*cy*(1.-cos(a3)))+nz*(cy*cz*(1.-cos(a3))-cx*sin(a3))
xz=nx*(cz*cx*(1.-cos(a3))-cy*sin(a3))+ny*(cz*cy*(1.-cos(a3))+cx*sin(a3))+nz*(cos(a3)+cz*cz*(1.-cos(a3)))
# Y-Axis is normal to C and X
yx=xy*cz-xz*cy
yy=xz*cx-xx*cz
yz=xx*cy-xy*cx
#Tests
outFile.close()