Skip to content

Instantly share code, notes, and snippets.

@jmansour
Last active August 14, 2019 00:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmansour/5635b3de575ca55639ac66ffef0a2170 to your computer and use it in GitHub Desktop.
Save jmansour/5635b3de575ca55639ac66ffef0a2170 to your computer and use it in GitHub Desktop.
Polygon Rotations via Python in Underworld2
FROM underworldcode/underworld2:2.8.0b
COPY PolygonRotations.ipynb $NB_WORK
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import underworld as uw\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import glucifer"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mesh = uw.mesh.FeMesh_Cartesian(elementRes=(4,4,4), minCoord=(-1.,-1.,-1.), maxCoord=(1.,1.,1.))\n",
"swarm = uw.swarm.Swarm(mesh)\n",
"swarm.populate_using_layout(uw.swarm.layouts.PerCellSpaceFillerLayout(swarm,1000))\n",
"matvar = swarm.add_variable('int',1)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"vertices = np.array([ (0.2,0.),(0.,0.2),(-0.2,0.),(0.,-0.2)])\n",
"polyshape = uw.function.shape.Polygon(vertices)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# setup material... 1 inside polygon, 0 outside\n",
"import underworld.function as fn\n",
"conditional_function = uw.function.branching.conditional([(polyshape,1),(True,0)])\n",
"matvar.data[:] = conditional_function.evaluate(swarm.particleCoordinates.data)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAMAAAACDyzWAAABhlBMVEX///8AAAC4uP+fn//Gxv+8vP+0tP/s7P+zs//h4f/Pz//AwP/t7f/x8f+YmP9/f/+mpv/W1v+Njf+Fhf+ysv+Vlf+Dg/+wsP/i4v+Wlv+Hh/+5uf+goP/Hx//n5/+env/Jyf+urv/l5f+Zmf+Kiv+3t//v7/+Bgf+iov/z8//Z2f/Kyv/29v/V1f+oqP+Jif+hof+jo/+srP/+/v+Cgv+kpP+qqv+EhP+Pj//a2v+MjP+Ojv+9vf/o6P/Fxf/Y2P/f3/+xsf+UlP/Cwv+QkP/4+P/9/f/19f+AgP/q6v/X1/+Xl//Dw/+Li/+rq/+vr/+amv+Rkf/ExP/k5P/7+//m5v/U1P/Bwf/w8P++vv+6uv+/v/+Tk/+bm/+trf/Ozv/T0//6+v/r6/+7u//5+f+dnf/09P/MzP+Skv+lpf+IiP/u7v/e3v+Ghv+2tv/Ly/+cnP/p6f+pqf/IyP/d3f/Nzf/8/P/y8v/R0f/Q0P/c3P/b2/+1tf+np//S0v/j4//g4P/39/8NM+YMAAA5CklEQVR4AezV227bSgyG0fD9X3rvpC6M1CcdRtKQXOu6BTo/v8pfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeLH1f/K+jpO724ZyhETnTrLR6/h0LkaPfI4vUPsxA5xO+y4v2fVCIjPdYUS/+aENnpaUGxtl8hssWrbGLrh1SILPamldj7i65E3vrQx5h2hMhTn5sY24wQuVsUwjGtCLG9pdc/thEh9rTi5Oe0EUpsY+WZT05CiLWtP+1FKQixoE33vDgBIVax9YiTnD6UmNmOw812cSFms/Nas15aiCnsv9DsFxbivIacJctlQ4lzGXWKdAcV4gQG7p/2kEK8yODR0x9QiGcaP3SZwwnxcIesW+5gocRDHLVo3TsJcZwDZ6x/HyHuc/R2bQ4jxA1O2KvdQUKJC52zUd87CPGd04axvwz/deoelv9hhr/O/s9o+W++gH9c8FNg+f+FGb4uqU+AP8IMF9UnwNsEvVeIy+oT4G2BxitcGZ8Av/fvvMLV9TWe/vfzW64wQX1dp394fb8V5qiv5fTPHt9rhZimvnbT62+eT1/D7V8+vc0Is9XXaft3L+8xwoT1tdn+w8MbjDBnfT22//zu4iPEtPXV315/M8dXfvyFr667wez1lR5/+aOLbpCgvrrjr3pzwQ0iR301x1/95GobpImv4vjt+0tVX7n1Nz240ATZ6is2/8bnVlkgY32F5t/+2goLRNL6isy/77HpF8gbX4n5d7819wK560s/f/P+0teXfP8hL007QIX6Mu8/6qEpB4jR9f3HXrn/JZG2cfgxlTQPo4yOSSYZIHSSUHxBUCw0nTdAkd7SEHt16cBSmNt5D/3vi+Bn220hOTzPzP19mPkhxj7AXBf39bkfenOR7eqS5weQJz7M35+zJtgPIFd9eL9/Z/cnXX1oAxAgieMvY31QAxDjiOHfJWl9MAMQp4jhbwUIfHVJ4N91FiEGrRWgbP19w5QvQsl0mvUD0e+S9zyWSKUVPRT97znlOY/lsGjZDkW/JqcUEeIbtCWHol+XE34VQsO374ai/2NO5AhhwTuqvwZIUVchIjM/Mxz7xkgBI0Tj5SuGY984KViESKwCNobZmILmBHQeg2AK0gKybx4VJEIERqu/VlkBViFxPKFOSO5tsNKOkDCacCUk9zZZ6a5CmlTGGCG582AlGSE9IuOEoNw5wZKLkBaNsT5Q7hxhSZ3HZECs/oylpRIhCQhzbLDURdBSWIVmP99EGTB1UbgmRwg2BZ4uYOoicU2MEGwKPFXA1EXjmnQeg02hc/szhtf4CNHGwE8EztwoYGNXIdwYuHnAmRsKbFiEcGPgpgFnbjiwIasQbgzcLODMzQEWHSHcGDq2PxOJRUaINwdODoDipiKLOo8B58BHAVDcfGQBEZovZZIBoDgNZM6rkIaUCQKA4oSQ+UVISMpYfkRxWsx8IqTlZPUHBt3+eUzPyRh6SG+i0G1FSNRJODykN2HollchYSeh7JjexKlbipC4kyhyTG0A6qZXIYCT1R8adjMRojjx5Qa1RsJuNEIkJ37YnWlN8jxGc+JDjWmNyX1OhIhK7UNDWiNz168QUalj+8MFr78KAZXaRwaUBgevHyGeEgdiPGl88nrnMZwRD2A4aQnI661CNCMuvGjSMpDXW4VgRnxwwaSlID93FUJcnd4fNntdIZhNyAkSwlVC9h8LAUTIi4+6p6zs5wvRjpAbGmFHqdkbEyJ7HvODIqnXEfAN+xCM0OpPBvpmfGitQo4kdKQ6j75pHyoR8oQgIdSh9C35EIiQ6/PNlulk+pZ9zD2P+T4ZfITg+O3omBUh54eCTxAcv10dE1ah1Z9U/Dx0DI2Q95PQB4jOz0vHqFXI/RnwA4QX4KgjPkL+Xw8/P3gBzjpCIxTwzfDzgxcQoCPqPLb6k9JAkA7/CEGaNvqSQEGYDddVKOSHlmB6EigIPuX4RCjmd5ZgehIoiLdpP0JRYGK+1shLAgVjbNo6j63+pHYwzqbFCEVhSTE8KSSMlGl+FQqjkmJ2UkgYLtNMhOKgpJidFBKmyDS4CgUySTE7KSTMkzk3QpFIcszOVIsL3T2M9dou9vT1V//j0sAgnMuPIrT6I60xNKyMsFG7OjauTVT+4/KkwwbpUuc8FgpkBdj+dWXqKpt2Tl4bd8xU/r7ucntQXWqsQrE8VoCcrtnpoWGv70bl/uat29Au/1iFgnEI2KJ73PHcrN7M+f13L5bzC8zfBlWpsQpF01CxxfVYmAouVu9u/ycUXiqfyFpkFFOlVoTSzk0ekfnoxNnd9Ngy+2sDrgCqGA9DShZUJBZY/dtf94aqr/fjHjwVK0BAkaFh7/C3v9bWfQ/YRuzaZlgPbPyX9a8iqVgBQpqM646H1bu13k2PmhhkyVQ0oKoTW4nt9E7m7F2PHpX/+d9j0iZWgJAmsUhiqXLzJOrY3XuavbfvcmgOfy4Z1w8cwWfsQfL/jB0OD99hR/OTWfaTJ/+cqInVH6bKaN8LW/nl5XY094odFtbtwYKmB39m2ZF80bvFlov+wOVk0R9jl+J6gOUdkWtUTawAMVXm9MRrxnod0Rhj20V30Z8pKIr2hi09HC8W4jslLfhiwOZM7tvdUzGWV0vHZ5+bpadiBYjo8jaQZWxvPpq+zpIp+0momOzRFW11IlSyq15dCadVr387Eh3XvT62ltO8Y9WPedIexjYPfyFkYgWI57KyP1p5fZfqvsye+NyJpDsUP1yOO/viircYKpWrWw0pQdt6YU7THVd9Smn8feUDQyfKwd6R0734kohJjcsKkL7LjHpy4/T1bmiEzabV7g+ZkK4l+8fCQeeOszu07gv7nqQUR/9h3/5iqbj29GB75eyTV04usGOvvjNNxKTGZQVI38WW8j0/fV3qvcc2p1LH7GNRD8Xmg/54ZmE5orr6UqHlgcS4835YexYbeMDKtX5azlaa/bzRE1X0ydPbjSHzTWpcglEImeLaHH1ZYQvvv7DNwb0F9vjXjx9YPhJ5lY1uXWRsUc+d2AuB31hWU3KaHq9+4vctd3Fu93X5LmNXNTVfvhl89+KW2SK1LitADJsBt33SrnqLp/GlHzFXaKYvMsZYsts1k9YOfFeOCoqeC+quypszbs0ftTv+OL2NRL/ufi7f9Gr6IgWR7y8rQAybtUhR1xVFmWK2UvwNG/FP5BQ18yGspSZnjn16eGVY9/f5tUT/6ZtPlOBcjyuU28rPfor1VL/A5vV+/V7k7fzuv5/0J3td4pdGsn1/EcU1FHZLIy2KSmuhKA2ksbExLki0FJvFNSqoUVFobUVc4gIu//mvMJk37/d9M3nzZjITJbmfhFr6VtU99x7P/YftJwFfCZrtUjIqEOSCub1u2lBvDhyEMHmWq6hem8yf7vStvndiTFURoE0pDMGYgAkJ7/5y3mQtjMLset2HX4G8cUj2i++Zz38gpdVFwO8LZwggEErctAJsFufG1VBYthdIWEbsrkcRxi8mAaKInFDH9mAq5YMuM0aITH85PMZYV2nHVoS688NfcOwXBeMKzJ0eV29Gq4x/3x3P1a2HSd3eySTGIdJ8OHFqqQsTvthz0uyxmncgRtj7foASZZ5U81EhiIg9VC5bHwBq+NwoQG2I8TFa4foLjofxUXgbYBwrVZvR712wKsEz3/MIT5+nJxLXccGSnIRIe2UdT4VFLI3BGC8utiSspmxmAiwEIZwKiEieqhFTmwUtcwZHrtwmdT+vreMlnH/7692fHNh6V7UZ/UnAv2Jzs5/HM4EwicznZppGJDi5EG/3qVOV5acYsUpIn4cuW8PRJq9uifwi9LGcGkXWhLlhd40JM5jo5d1aDsmLlRPH/qiS+BeOrjrPubeuejP6k4B/wS5j7vqLazrpEhFvJWXaMucndcQJ9kfoYAqtjgT9ZtadIey4orOHJo/VtVpq+ABDtvy7sWTisC7uOjkJEUlj2boxjEgPHMExLymC/RnH28cnyHCpX+RvphozWm0E/EcBdcjhThezVpnpijc4DSvJUCLMOtTUKFiRFJPUWhgoYPe9aYf6DBj5nskHKpsLt7dWYa/Ra7PLIopYWdZVUnWrLailL6ddgTxCtEG7Kvc3WAOHPBGPP782XA7Q0we9AB+rKKE/CfjnbdfBbD1GtDoYWp4PC54e+8JFjrem4xvZbYARDmOJNY/OuBn38tUkde/XiNC/nY3HOGNrRNwzcWGrpuuxKJt/6pFkYm2vc58XSWQKI2oCPdASQpH1kOyvvHW2+r5NFpvhzOuyOTPbVZPQquPfP4noUGSnoWmhNm/1v+seP3DhHvBshSUzJrHrtYFNCRGi3/SxRDEx4hT155E8WUAYE/PyzfhQpz04HBC5UvPJMdSlQtF4fRZnx4N9A1HKP2LfHIVaXjJD7dgcPfrBLjZMR8xNcBMiGibGqknoTwL+BWsZsdCeuOvCWGiiy3PbBUCvNe1ASEuzfYcSYYn2kEFIZREKLQPEcGqKQ4QNUwGr7zEH+mEuHmyFxWwDjHqte1CQo+d9rRDn6MmU7uvuYbS+L0/1YRSD1pq62zlzWCE4WDUJrT4C/uOQZv1qru0JJi6fVwlOcMd4lZXcGxKxxowbDEJZSsCKZk023wtU3ByVflxDSdZJx7cAFsKvt1uRH4pYiMruj7vnI+FCVk+Fc+WOrudLT1wMIdGGkRhfDrCcu+Drf94ermt99fn8ScC/bnOrHwEaU3pDZUHlid0IIhmVu9JqcC+gq3xoY8seaKl8vDGFJC5H9Q9mzBhHT6+ez5/IxNpnya7BZlpk2TLArZEJjm4WWc58V/l+bpErTTmlawqbtyISnKGbK0+wa+R9La89nT8J+I1skiVpOpxLRA4317qd5SY469G1lOy6G41FxwEWk8nNmFToe5ijbnXOMLb3FYpT/oXTu6Isi2zxgG6vKTi6DWcZCcXewS7laIRunqZ0TAkoFJncSGn4RAwN0809c6H2XVZ2zn15/v0rTWcV8u/7YPq4m5SLdLzU+MANbY7lRKJveZMjsjwCNyx2wMcsImFdYoWO9w0FbwSpOdMWZhkicLqA5LBs3aGnZ6ZCYvZ6ROCY0vpIzTiH8AJAZ1hWUzxv+lRrWliBmcEzaG8z84hIyQVTRUyhq2nMnKy0c4D69leWzmok4D8MqjTyCHCQj02d7sLAff/alNH2FnqIICvXBxrRlWkYZBHfCSVBy7EcQeymQKSUnZEce7oUtYqUl5JE/9kTpkZYTeFUmdcdF0Uea+shwlECDvl5ZaGx6QkmXFr8+ck+GSMqilLiefXGorKE+GbpdEMVGl5XNn8S8K/aqo47AB5TROsBiLOYY0juEU6zTrvzoVfBvm1oLKsc1wfw4fjYbZQRt5Zl2ZhVZ0daclrpoTaq5pM+F8aKIk+BBWtTa6HQ6YWVKpxrx2erPDEtaHt0OLVjkqms6wsS1jIiJsx5ZflgJgRxFWoe2BFKz72qbP4k4F+1TUmaosOYhpRL8BGERGeUpx13SzA/TCvRe4AOzNmnliq+Gyl/c6YNPm1vaQTp0xktd0F5xXBsudPmmHJGxyAuuj9ANlxzZUpqxLXy+YkPNVPv6NBAL4/S8dgtEL0OBiIScfRXvvfohPe2VGYOTGKvK5s/CfhXbThmH6XDoIqx82kHIymVpURpHtYQacsiB/3UxiFuq8m7DssBSe14PjQRJiSyhalq9kJTiiNcKph0dk7AJzvrhjdJ5APoby7S9jvh6V6Y9rqSpwCNaYye6VWrYmbqDfSmEYkeQeMjtPiZkf3ne5tZMvKqslmV/PuHUS0969RwVGbdH2sIyckiQSTos3KSPZGsA+iO8gRhldinsnE7m7IEu6n7jjtjLAhClPfPwH1BIigqa2sArTLSTK2bwVqAy2x+BW6TvKZLtMNGoLfAIdHYTs82WrL0O7wJylhbvCwkaw4eLs8+x7JgdlHWwm3f5sHryGZ1EvC7wLqcvlyBpVR43B+I4JiVbI3IuZ6N5s6BNS1EtYtPjTiRo04Ih0n+2b9MIp65gO5bhjG7Iloz1vIjwKcQ1jnjw4albjzLqYe9Ph1LFf6hFEzkiGqqdNyBNwP3gytPMDMcEFlXXMds8ohuX3V3X3W7IjWVu7e06PjrSOZPAn5j239Pf9y8rcF5eRlJiRLmSh8t2dZA2ta7vOZzRc0en5KjIvXuQMHqQ6JcmoRBEUV3Rji5r3K+NU+5apIlTtTCI3NbEiKSGrWnItMAe/Gtgv8CRt2OsYLMpTpDyoab04pRgqQEPTkdjS7YZNZEp28DengR4MPl6v7c7MtO5k8C/h221D3f/Qn6ZJaViGQ6S3L2msFKj+zikSzIGsk8TSddHOKcmpxc327mSAhctGtTj7qEHSFuTJRZXc+WLhxU+4is1b3fpYcDRbckLsAmLwmVns5SWVyLJcdE6mKZOvmwp+lpVVZu6C2Tjlz8A7xxs3wya3n4/0J7d1z5fahbfP8ycvmTgH+LvXexNuhM6zhiaeh/4xM1OWquW1o9SGEOIaxN1UaJQkkk81QhczkOK4NBVpkHGI1yZokwF/d1tRsWAYulqK4LCtNcuXNB030Zv+ftoEsmURFLHCKZpc1ti0xIOq+r48d2FmMUW7q/gxqNPwG4CCPEEm7kl6Ca1kfhzm/eo1ObkKp9Gbn83pWqUlwbHLED1IpyoLJq92m6SJzO8EbLtA8TogZYIttFqm5RlmBGx5LQl5Z6BlbgNJKbXrOmImP01J2ISNR38nR1c9p/OQm9xVByz2I125r91nTfTJhwQuHRl3ZHidr2waurTU0pwvHRjh5dPF+L6uYhWLapYfqI80tMg0kxf7Sg4uABQJxV1l5EKquVf98ZWKtKcAJgjf0sP70h4io5GiKyDeCgzRgLtklIKRMiCWUNMRv5bP6ky50y+e2WtBpfrlC0WDlW4okshw/pzMYYu9q08GYbx6FQCvtOTNc5gm2wrZFY3rwBHxxStHEiKZg9Lcu0I4c+RrBkoeeO3oQI8QI0LnaeH92nJWfXoM/eQT+s9pTOXkQqfxLwb7FHs1I8osSLSMwEXa5hEoF9qHUVKsoGLU8tZVftFKv33W1wkgPgqrJ5MRjFOse1fYrQxtld8RtcyNvVyD3A27wUuZ3SRLMvJepqJFR2ye4TJnUN3Tp2HTzAzHEaq622TKILPKmKroIZIdnVCbCkIWkR7u26pPuWNryLdGeQvta70/9CUvmTgH+PdT08D925ZDsdbASl4Wh2Poz0MZipPR0dhHeJCMca59bC0e7Jm5nPh2rSMpd8gDxBwhBdNqezHihlauj0ZmtsxOoMkcxhkZecfbUFPrjkT57DqJXfOhxeTtg5hP2q3AYfLZR/3DhMa3QUjqFBJuoKrOt0pew8E53a29FguufpS6QHnbUHPwlYtchulyq/RxFOSCSdGQ4TC0yrgpK7nhZZhtPGZzyXXQVmA+r3T2Vu87gYp3wtYhRa3Rq5SHBsOBEjknkHhi9qOBQtpgITKQlzshY7OfUwmPbWUopRzZt2RAlmz0SmAWhzx5X+fRkiSD6cKRMs1MJxWZSkzIcvMXVt2UWUWfqyWo9Gx34SsNqRzUcFHyuE5Kj7HBYVgdd7rs3WKWcqQZVuMsq1LRaKLFWuZyX0pGRlYUNja1ZdGoqJBGHHhqanJBT6NDo7LqOKieVkjFE2APpkCSvuFCNgeeR8lJ7uDBF5r3LNXYHJjX/YUDhSBthPyGwJWi9nK186FSy4Sm8BGhfnAUw8b/p+mXxRVapmaIfjZ7a+7Y2VCsU8TU7WOng8CqdhcR2W7zTOW8ThCgGX4XZj+EQUs5FUyN69aGUiGU2S9byDIC4X2aRnu1JU6zDrzBJZzj0CXBsjmYyAC4OmrUyaKpnHrhMSegfvKdWmGC09veaKdNBzl07jzbU52leJpVWVmEMayKxXdTbCRDw+8SXIrk/Pw/Ofwf5PAlYvtDMjn64UfSLCbDU4YhjlFjJFj6gng9cW2WoX0izB5fXaAMcsrClKQ+d2kUNSzRU9sb2YJiS1Nzy56VJk63ovQK3nvRFLlo9QkpD1Cuo0iSC9dbScv4e4hEn+amXw+c13Z4tWlhuhgjv80UXC13RrRyEhKoFXlYuXKeE2s8V2Om0ubsJAjXfhJwGrFlpEUk8BxgM3w1tWnoR1nIFdSoAbRrLFhYioM4QImy7RX2yYnW1uHqoPMjFzKEkZsRNReYSzCz7jff29KZPz15jF9Kmfi1KSnXAoTOkVd6msur7By23Q5GQYa8Pcl0frRKInL2GikNsb9xUrWlfDSq5ntQMYDIzsvHFjZRzgwiWZb7fTUvbhJwGrFNuRjsQBOHLhINTxcjiQxO6ZpZNxeHS7Oo8OB9uyAtE6L6x6Yn/wTcX/WEDMYY4EZ6ApypvDvBjV2RqAeifRVYLFzvnS5RPtnzlJpE16Zr/LJ6fbopqvtRyfN0tc4GPljruyQrD1GOBckeJQY7TRmzcUtfiBfhu+nC1pegIactlWgCWjZnzYMWv+s1/zeLPQ+KMVqYqxDRV1OUjHkVQJlhK2Y4jpXmiT0w1+c99jQ93HKy+RfAAe27ZXT4165uFMQcqw174xuw9rNUtnAuJdmZr3AHEdc3qq4/2oX4l2AvTJUqrS2KFNcE06uZyDEzYZRMSa5z2WY9MeOtnNxi5bnCS1AzBXZsLeluFyNFpTF2JO4NPNbcV1p45+O6/Z+TWP90kmfvBD1aiqwU3msHGIjk/Hz8vGDMv2XSU5TiJE9bHhKX9YIk6A+axVRiSiuG7fx0PlNwN1vkh+kvo/qCg15xbt9zazSoi+DdDBIaQfwZqI2eAUbdRr6UJ7QrT22AsdIiHYskxP7YWjgWd6LUbSC7PllH8JWksRCeXGHbIkxY/WNt/BdNv9/431aPCI5rE2jJ3vfqgaVTe4Psu/FfrJTlm0vhoiGNGJj7E7JFGg/RCmNUwQYaXUKrSs3UG/ExN+7YbyrSYVCYYQdkVJSELsKlUrDSE80W/kdGuKyPErJ8Hpzc1DOF6qI4gzUko2nU6bHXOfH9fZeDFZXIK7pMZjbWvYjLUMvZV2YisbfNa5gV+aL7QE7PF6A6z4FCt9h6qyqfsHqdGPg26HJ3rifa8jKnCMZeONZ6c7GQzkLG/goagQalweoFMJ3xwrmM1OpVML0JskmOe5WMxqK2jZyh2dLE5/6HfoyWsBIbEnRCg9L+j+hJ0g9hHgMq3pWLYcnCdMTd2CLPI4+ATXKS6dGH8L65ap98+RzNvZijJfTfsca1+Ca7Wi1DBNo4nXe+jyoqBnbn+8ElU3ut28dYwOZxeB6B7AMW2yu7MJibnu7Dhe9dpZhPsAHIg4FnXJf9qg8TXQn6W6lmIUdaT1evSqcseNVWyjbKmbuIohrHGyzEn2xUZ4Z9QlHKHfa1Uqpih2WZB0xUn7usQWWuFjg93e07687QkkffGOj/RPQeSsjVQiBQn7+wH6p5vP5oK8aDOsmOyC2kDvGXRx5sEfr0RVjm6//3nojRAvHMbMlW54nrHURvg4BVBKFYYB6nS5VNRFX7QQT1BB25CJrGJdtqadd1Sx/AWvwvZ8vmzHm3cRollM3kLB0+7irG1HAG9cLIck9eSdQ+aIWUNUQAXjMezxhORsubCKdKLXAVgI4k9h1k8kzdZ/MVQXYvpgQSUZw5jK2uuWKtevxZsBZtamTn+sElU9uvrudoATd2ddkuUrcgit7cMRPlBPAczOznvbYD7QpiEkEyv1gwsXy2pqNFvKENkGEMBEDrtHK8c+wk3N8HaKNQ9DG8ulTTWJw8q2CSMsKbUAqw1G38K6PWfXkXYPDRxCbIbl01aeYAtADYfDVAHXC8mOu4DZNqXpCWj0hYuG6eiz/lXsLf1/bWcdvT9YhaocX0B0P9GhW9Ej8QrFymKktXPDkqHdF8BNuJInJ1K2kNA6XX+qVYmMcuPLMMLhIEAPRkQ0Nb0DaLZMZVn3bO90U0VEVVl4JjPVLZZIRC9c02nXBf3pzUuIvYb5ssa6Nrzx+9EErzkfoVXB1orOdR1AawSZm+MF9zRceHoNB9Nj/064G6ts/EnAqsLnZZ0DdLiPRBfpUJ+nDXMBVsyocPRwvVMgxLsp4zBlkZF+PbPYNcTlOui0KaK20QZbjJiNhah3tSGNQwwXrvtIP7Xfz8cZzfW5VT4FM4GwpNMjp0bj9of9NR0hZY720jfn5a0dKmpHY4Kk3DVRXbyD5YVcbmy3GAl8GnLo6ZvfyOLyZqL7/995d1TlBYIqx/c4Nv88DldEqrdOxpL1DKDNdTItcHokZ77s1olx1ypFqbTdhzDDStmuiv+hKW88B5i4WY2RkMKJosBymI8fwIOD4XWd5Zz0GoC9qP20u+Ckl09JOOwOlEQsWZ4f7Gbkrco4oSNpxCKj8Bx1QYip323thzodhyoBGdaO/y3W0xOvrbILV59+2Vr0lYeru0B/1l4jvqlINpfboLJEhQXsCCF9/Qh6/daeyT7F3koFL6K5Y1zyAeo3p7vshCjXa+nMfF+GodOtFOEIUiZgJ0XoSSK56w9gupTltHVYWoF39Q0ckrG6vuD31Ta2LgPsxMLPbX7XKocsOptuBrDSg8obuncQRrgAjzuGglCebWl9pjLAfFKW5TzV6yWLb/zz1oCF0/p+nAJVOcChLDHON35ZPISJpCTdfbNQX+cyt/mmaP97sJJMkokD1CihPO2l4qERy4vwGEEoDHVRliBifP9kEiiPEDO84HOkZFFPTdLbup3uhC6pYXMTjOVSkQhtyU+B4srnlzztJ2pqkbZ1lRB9/aH7AvoVxJlGfRFDWnI8BqzFd8+O1xEss+VZACNHkv3PWzNT4fT0D1KeHwDhorfzX/OHHNaaemTmEGCd51jOutfszVqtWVUaAUjIutcqK2P7BaKPjzdECIrCXYRQ6dNu4LYuJXPq4pCbqDyWULL3NtCc4HizzHk9O89ndWxZfohijmrXu+5B+thu8/gs7HslrMd7LWFfO5hSxpZxhhiMmc5BO0rfA/Ta4jcdZfdJK1zXhBGJvf8cZu9059CPUp4fDKFXkjfroq4JgEYvlSaZkzHWTNeuKFWvuIxlMb0A46qcbLbLEUGPfzxXsSRJ6Yl3DtX7tDAGYMolZYRDJkgT3WLObpld3QAtnj1v3u1cABNGKPf2aovJXlReu7EE2mOYkGhSI+lVgLN9uAjGDNb05lEg4l3d65gSWBs8Uc9DFxPS1bYfvTzVj3CyXJ58212zVJn7JFlGhMNc6YTnae0r7CFc2xmDpPhFUvOej/eXFBappvVrmIxJxvFkZBPety6wtJO+/agiqea4He5u6U0Jxr45NLQLvSaZyuXihRGHy5u0nW5xQrMPEz6iYLGntWO6InArgwadnYL64bMOlVXCIcp8+AhjAo4Vkw5vTdMPXZ7qR/gcf0Jxv6FDj6RHdHXL547rCDErYJMQwrHaOQVJdm/D+iTAbAhJTL5xtq94uubc6hC5LVjZm86HfQeUXIpi+dLb94NYVkoAtUmfW+HEZDRstAvhdYCNVOxy2mW2rcVUy9WWmPrsb8j7m67oWGKJVDgfgLWY63I+zceaGcLzzkeY3TwZnT2qePaP125fz/5A5al+iM/h5yVXFx067ZnhizO4jEV5QlxXH920JfccA2zG0oK8VXF8m0P6xhxsCzi4lg6Vy75DMIlRT+XTQXunlUutAdSbkqloVMfBp7MeSVzobbBRbYy38UKplO3bpn13dL65Y2/t4WqEDS8CHHnaDLe7e94FgIuCziYAHlRCMu+SRPBmBE1y3X1ci/IFt++cPrIRFRVrx49TnR8A4nP4q22V6lIGtFd+x3jdUrZRTdswJz/vw6E9+rnsCwXbSmnLweFQWiLF2Q9wYOLVcfqhPpC0JDku1wTjCkEk7TWu9TkLyeAxfPIIRLLdTZnqdCJuj1Ilqw1pU5VXEzV0McVzhq3ViJTtBVie7imtQrOESGa5R8a8v9ttN00WcxyRMAm1Arg5SZIsnyp9+/1u9RfnD9krx/gb4T8EAo0HJyP3tMz7v+yNOIY/Tw5gUZGtrBTRiHIJH2uC3pxQYdM91UZB4CgZ2zRMiPnoaNJFIudvoDXNSbK5kbrUSginIyP1BxsiZ51735poaO/1nDoJMoS7M2KwQv73Rj7Weq4jfappUKU0blBYq0nElNEIcTY4zOlC2rwHcB7mGUfNVbUX5w/ZK8f4O+EfhrmR58mH95Xfm5BkXm5OnAJ82j2MKEW7aC+YN4/b5604paDsHKw0O3RCm2ZDyye3JMs85eSRN5Rt6JzpwQjJG5VLejVEMEqveZOCJCb9Zl41eTUtzHAG4fSmFEw6DuGSR/Jai61QNuc6iqwUCxEk+dIcIhLHCSbo07DvupkqoY9SkqRvq704f8xeN8jfiX7eFS5VxkOjZYkO9xphE1bZcdaYDJ34rW0OlFu8HXfF3HZREZSaj22MEHRKKFwPcMYQjntmb++hV9UKDl5ik1RNaZd2c5RP/g0VM7zOEUVkbBlEOIch6rijjCdSevuQR5LxAgbqRG5k2L/VoCDENk/4Q6n8Wk1HO5wWrDWXWdcmxDmESKirymvzB+11gzQYfjv++cMBOFgfi0vCeWVplNWEWXfXj0lIy0nZgHmkHxKcxAq8TNLHTSpBzjl/rON+CY5DiJPlWH/lVILDUvZkYbTC4cOtQjYqkdDRRCbsCChESvbtzY2lBSZqCFApW01jogT6shpR1wBGy75EMmw7C+Rydf1w6NjaXH+EFZsvcT/bx0vF5bMRRZKD1V6bP2ivGeQz+36Pg7CmqvlCsOmYTrs2Noc6T+7BIiFOEYP1C32D4MloWMcS6+6aN8vM3qlnyBZ1r3yK8xyHIsOVC0aNGpt/Qyf9dVMZQohidp3DgY/VvH42ugowODE04WANtorvYcHqsIt+Myt20tWn+k4GZwf9zhuA9xZOU5WefZOM1R2qgrH1a8+HW5vt9jQ/9alqS/PH7RWjNHxdBxfD4em5Had1ms6XKxtNPoFgEjk5TAic/wDeNccL6cjIIG3R4w05LVXjI6m+xts0YdXYSOL6LcDbab+trty3v6loYYKQnMw3wmSI9tVSzSkcjETN09BsNTTv1plGAVYurZIrTSTrKOxTyheZqIBx9gigR1V1Ltgfx4gdhzfri55Y9IRGMx/Gck+1luZ/sVcL0/BfevFMZ+0yeFQuAW+TapHKkk+SWUGJ748rBPsOqMdcWjdSidqb6qQCJ7ctBq1hR3udsdxn5uQwbaWwWggxOLXazAh5HhFeF/dgNkOQtA4f+mt0IvXA1bXByWF2izovb5SLKYK4mCPfDHCdIhJC4inl4mKH1z4Fd3Yh2zjUZg8GBK44QzWTRcRRnZX53+y1wvyPuH9TB+t78vfQLCHxEzxZtHSps3MFPGk90kq/XdsJUnfhMCSXy5roXIUBP2Ub7E6PRDDh2qjHOENUxdj4YWyjq9blsIVy4wBxDudGbyyWGCFsaa5txEB5hisEBKjLhDQJczwudMGjj2FYzAWeP5SiyXuA3uaRERdhGkb8HoAbq4TF86qszP9orxTmb4Zt+C0hBBjWcI7OjptXn3euxuse6TBXkDCOLcO9KOUmepKFvk/Q6YhNTR6mebs57b+hLo35sLWjaWx6//ncUPch7NeoWDdBQtcZjLB3T8cGDiFhEOZm4VNe0uLFSDqleAeOxts27zZC2nOT7Y9LAhXUFp/EUz63Hu0C7Fsw+ULbaqvM/2qvEqbh96P+LSHcbuj6T8cmjbDeI4CBNAm12jisB9bW2wTd5mEkTbH3DVOX9z6ZS3uFUO17ON47h52p5okYYQsXBw2hcJgglClzxJAXop2wZhx5gFLOXLt/v3p7/gA1odxm/aGp7+JoLOAqpMKFRvqQFRMpedeUL44CbLFyytM6tfGhugrzJ+w14vwvMRu+ws9/2ZqKUe59ZdYXc7UVRUxSYYWRCDOekggivKsJoI1FiHeIqqt8GNes2y4ut+lWs6P3Fke82aYTbczEYsNZy9lMSSXKOBydXv9y+xbH+YLRfMtZmccS4eTy+1vPtYsQeQt6ZK0D4Hyk7XZmRA+PV1Vh/pS9PqB/IOL/ysF5BiF9bYYqIMB0WvdtaWJKZFVEcDmJOYyJ6L+ccyLMOob3jILsLbO5EZ4Iq/PN8USBpV34ab3teikrM5V3WiNENg/f97RVWnvL+CHAoiDxEpL8YylEJE6WyyOabnRoonESNqKRWrg22ktvYUtLdVZRXf6kvTqgfzDgr3LwxswR7GwJOKcBbtMSNpslki6P+FWW6ZhypJVcNioKBbPd4RkC6I4wptWp9QYZm9/Cjl1mwum151suYlisPDKZFc2ehZCkBet2oMREDqHLhSWEkGjLqyF/35atRqeLjtLmJ9qJPdsAdQJ2nMFtTfNQ9dTlz9prA/o/xPv7HFwTuZC39yZE8stvC7TjhsOICLbbwe2F2oA5E5ZcJaOECZtdefY+Xdylv02OLG2YCZ7w2cvlz9eM8IbCJB2HF24CLEEcK6Uet2RlEWDBT9s5Dk8/3LyrOHbKCIWOfn2/LxU1zVRXXf60vS6ghv8xXMNvk3BpyzsM0Bu0dsBujEqVbFU0VmT01NK8FYVTuqaaY5RR6cZ/P9TbTv+bCSHOCh8BdvtbzQZ7YL2FzpsEhLCKEdu9GjDtQj2VxWLGsvnh2fF8K6jqyuGvN906hcy7qqrLX7HXhPRPxfqbHHxb+dm9oD91MV7iAhMmRuSQdLJbTMf9Akdckx1RwXHhua74NbWNfzm2ohLCBvYrU48j6IsYsmp4bIB24zQhepuGWe8jwNOJ7+Tp16d2YhKWoo+fF6vxhovH7hRxjjc9VUtV/qK9Iqh/OlTD15TzzXGR6uGHzfWcJN7D3HB9jywxm8NTgUwkzdgvAY58cmz0s+9QDMvFs+fpFidhbLBwbMQ9vgw7IUmOMKykjgHMM0jY/vX+mzRBSGv6vNiStVi2J+ALppWpKqnKX7XXA/UvRfo1Dr5dfh4G6oaHPJQ5C2E2PTyiiwLiJXUN4INfd90eHF9cUR9Peeoz/2AsohNk8PEyi9P5voPNkKAgXUs3z8KNSOSTX2//OJbRWPPt58UIh2Vibj1KSCQ8UBVV+cv2aqD+5UC/qoOfbS8aOYeJKNb24nzYHsm4Rybp7nDNab9NFfyLtCG/X8pEHRV9W76uyamGKZYTGEVKNX2a3gyYfScJi2WnKyaJlrG5f7v2eLy1ZWW6exmGsgRh3t0IeywKP1ZDVb6BvQ6shm8S5n/j4BQrjrX4OJaZGu1rblzt9AkM1bKB1cfhHEKsau8GyGNE+I1n76sWQ8DnKNVaJd4yATDz+AlGWHYKuuNmVlJ2fr32Y5+q2hkm33gWRkjybzVBf9FuWn71Rfk29iqwfrsgDV8jYetIT/tZlhPFCKUaPGYwQtHGt6aIY9HPyjrmMitQpnsk+9m9ZJDDJ/1XRknSM/PHvbRDR2VhnTJzi1Cfjw+zMHBU8bvXEeIwkYIHdoJCXsbcBEMPV6+9Jt/KXgPYbxzj14XwsK1AhZBO5q2ESIWjOSNRFu7W3SrGWg3UG1ksB9fGTkqTtaIBYWYDGhQWh/Muq6XTxkqFJ3ryhkUkacomPGX3KV1eswjxPEHhC4fE+n1YWaiCmnwzewVg/4YQv8rB4WJPOx2uNhzZEzrx8uomQAdPNcxY+ZpWUirP8bEwNmDMN8BKc9md8GNJjpWt1uZ3+9SnLmfti5GcX+MCdLXs54VmH5YyvWHC9jmilvbXX5NvZy8f7N8U4Vc4+Lby837iXUXNaKdl2RLAYFnBhI0vgYchPMEEs5whV+7ZGqy4PMFGVMehzevrmmx8nm503V74FWdDLLfReEaXK/XgCeZXR1WiORil4/XX5FvaC0dr+Bvj+6oOmiLBpefJdDTVcNkOTxs6QmzgYNJtzURkJMucYeftwBfnW68547P71h8yhE3VACy4fW7vDuxs7yX9E59dWt7Akk80jvBa3ysvyTe2l432747udznY7yDRGzruxM1pnyWUfwctRpkQZxcslhcHt7LFQMBwY083V3z36+w6NzIekVz3AZ5DhZWLgsTprs5l2LdgYfPXS8cyWxMJ2/Grrsg3txcN958IzvDbJNzLBHYBZvOcRFxWYl2tC3iculoDLVZJ2T5oXngAQ5Igse0R4JLBnF5edenZ2xOVFb1BRmNZwkdsvbBnd65tb7U9N2qYKeq5y5cB+gXZS4b7j8X2WxzseqI/T2WZVdtK2QZPmsuYSXQebnQk7TUlQ+VPhgwhEp8ACMgYE3FyvKEbApzspL2aMMGMisOLMDNfzLGSbPt8ZZxPNx00n0y8ENQvxF4u3n80st9pxhM1J/cH8G5m2Kz5LSH/CkzqiOtcE4gUM8xnwjy7BZ8slH+IZCvu0zGFicqICMe3edF+CrBSQARh18zO+jA0mabGIaCxxaGXA/sF2EvFa/jHAzN87UnPxvzcdjtAexSJ3XdWyirDWzhPMaaNsC6mKOdcz24bIsGiTKI70LpRuwywn9AkghWnIKfi9rAJ7kIEFwZeZUH+LnuheL9PWIb/SvtZh5a+hXWCkCGwbdPlQBohZXUslRv7WPk8ESYkEveXZt/udo/vruxCf4cvSls1QXJB4IpX1ynCN7xE5N/PXibe7xfVf+Hgk4+LDsMTSwnIlvty0RorqYjfbI0/sVT53hxTGf81dCVyajRbcE+cRxUGIyLzsc1A/hTemBylnwL48hF/35gMXyHhUJ61rgLENd2gxXc7x1vcHGsCWDJK4YVnhzMnURZgnCEEhyV+vUCQhBEX3O6CqwP6+erd25cM/XvYC0T8AkL6XQ6uNjwTbf7e0DdIx4G8JKwD1FsE++nz95mGiGMebnKY8GlNLLklRCTeP/SasP/D9uIQG15IRF9vxr98G3ePXKzUDs9v1C7T1fnJ4aedSTrZYLDVwso9XT5FzK0P7T692nL87fbSEL+keL7CwX99aJmdCSiZ0ef5cJJ3XleICDBddERYNnkFA93dHelovH3msZ9uDzy9Ivj/jL0wxC8snN/l4L/ttsak1E1Tw+LTzEJIUly23ufd7YgkEdlLZ4M5grS1vkzxAZryxdFXBf+fsBeF+UUF8zUO/rq141RyfUs+lkn6zGo4LIUXnrdv7JyEUPoM4CJEEFtTIKFz6JG1jleH/++2l4T5JcXyfzho+L1I10Vc/rjrY3WJlXEhyaY8z9vL03G7pvW8pVO3hFKDW1HjIGykIuOvMgF/p70czIaXE8p/FcJf5/PuZDNAU5tLVaLWkRgfq9+H075rgP7HOuPIPPU4TObalt8d0uZ74Nl+LcX45+zFYH4xgfwRDv5bsGeNz0P72OJEqyeFXKWyO8Y7uia9BZfGT8FBc5/P0V01Ofgb7IWAfiFh/EEO/k60KyOuHheReC77sKDgsKqUrpO8zGvlN9WUhG9sLwP0y4jiD3Pw98LtPx6wEqIUO+G+EC3v7d2VJYxZzl1/MVlVSfiW9iJQv4gg/kwv/k87EfWeKzq2euYABsosH8uPdC8ks9OT76srC9/KXgBqwwuI4X/MmeF3Sbhfu/74eXZGG+/9VN0buIIAx6aSDU8vvxTfw7477O8ewJ+M+KtCCDButNz9Mm+ORQVkvq26RHwT+96wv/f7fyXkr3Bw2SsJm/9atS64o8WW6svEt7DvDPs1Zv3fY/5dDtbkkk3Xpc5flseHvVWYiW9h3xf3q8z6/wn6tzk4dDOx69ZjrZX5U9NqlabiW9h3BG54nUn/z6h/m4NnDtk+XJls5GLrl6Mvtw7f174f8Nea8t+M2/AbJDy0rT2PcU6z/j/26iZFiiAIw3B/DLhSZqVrwYVbxaUIMngDPYJXEK/v4G+PXTWdfxFZGfG+F7Di8Zvs93ffYmp0N+3wZcV3P3z7ITydXr65+XT7+tXXmBy9zTp8XfDHvnx7g0+/v31xe/c5Jkdvky5fGPzKp29u8MPN8yfvgnr0NuN0rex9/ds3Nvjs45fD/S8cpAmnL61d9vGq/BtbmqQv/9PXxi7+etWMcG2TrtxPX9y66vOLN7g4SlfOt69OXfv9RRtcHaUr1+O1PHXDAdc3uLxKT57HB4BuO+HKBgO4tOd4fATn5hse22AEmPbcrg/B3HOE9kYYQqY5r+tjKPdesbXBGDLN+ZyvIMoDzrjYYBCa1lzOD2M85pCHGwyD05bH+WGIxx1ytsEwOo3Z3x9HeOglfzYYh6fRYfl/wK/Rp9xvUIF4joF6YTz7wINbRfI5IEAsXgZokaVAMF2Dc4IJHYwgmi4DtMiOIBzu+IPCETVkZaB4uAzQJBuEiLTDb4qIVJ+JQkRaHkCbLBRCyvIA2mTAEFOWAdo03jUo7OizgjLVNxgirCsDNGosRFxW/lCNGioRmJUBGjVSIrIqvxRWDbNQaFUGaNUoi+CmQ88LblXXIIzopgzQqjEY0UnZn10jOMKTMkC7+jkUX3TkhfG16ur2yAA68MYMXFUJUAY4NeHpeGUOr6qEJwOcWQeJsnAOuzMLWE1CkwHOTGC6nZqIrCKByQM4M2HJAzizFhalsmSApglJn3OTqZUnJBngzASkx8Hp2Iqrk1E+SAZom2B0uDkjXGmCkQHOTCiaX51TrjChyABnVoijpIjszzphyACnJghtL8+LV5YgZIAzE4Kmt2fWK+oakFILMkD7hJ/h+cn9ShJ+DHBmgs8OID1gQYLPTgDBgvaQhF7vgBAsSeDtxQPokbDbiwfQI2G3FwP0SNDtJfbn0QWUoPsVA3RJwO0k9ueRgNuJAbok3HYS+3NJuG3HAH36ZyXYzhP7c0mobcb+nBJqmzFArwTaVmJ/Tgm0rRigV/dewuwisT+nBNlWDNAtxLYSml7xA7wVA3SMCV4m9ucZE/w/BugcE3yY2J93TPAsHsAZMcG/8QDOiQn+jgHOign+TOxvWkzwxADnxgSbtoTauNJPkAHOLvkExf6ml3qCDPAIJZ6g2N8hyjpBHsDDlHOCPIAHKuMEww7wRzv1bhRhEMRAGOWfNAYYcHU/Hrt6dIcw85Uy2yMo/Hm1RhCAdm0RFP78WiIIQMt2CAp/nq0QBKBtGwSFP98WCALQunqC+HOvnCAA/au+uriEf80jCMCIegkKfxm1EhT+UuokCMCgGgkKf0n1EQRgWG0Ehb+0uggCMLAigvjLrIYgAFMrISj8xVZBEIDJFRAU/qKLJwjA9MIJCn/xRRMEYEPBBIW/imIJArClTIL4KyqRIACryiMo/HWVRhCAdWURFP76SiIIwMpyCAp/naUQBGBtGQSFv94SCAKwOn+Cwl935gQZwP6sCTKACxkTBOBGtgSFv5FMCQJwJ0uCwt9QhgQBuJUdQeFvLDOCANzLiqDwN5jPZxnAzWxGkAFczYSg8DebBUEALmdAUPib7jpBAK53maDwN99VggCkqwSFP/q4SBCA9NUlgsIffXeDIANIPzpPkAGkX50mCEB66SxB4Y9eO0kQgPSmcwSFP3rXKYIApIfOEBT+6KkTBAFIf/T/BDXq7xOE6aGBzpxHugAAAABJRU5ErkJggg=='>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = glucifer.Figure(boundingBox=((-1.,-1.,-1.),(1.,1.,1.)))\n",
"fig.append(glucifer.objects.Points(swarm,fn_colour=matvar,fn_mask=matvar,pointSize=5.,colourBar=False, colours=['white','blue']))\n",
"# add camera rotation\n",
"camera = [ 'rotate y 60', 'rotate x 30']\n",
"fig.script(camera)\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# now lets add some rotations.. borrowed from here: https://stackoverflow.com/questions/6802577/python-rotation-of-3d-vector\n",
"from numpy import cross, eye, dot\n",
"from scipy.linalg import expm, norm\n",
"\n",
"def M(axis, theta):\n",
" return expm(cross(eye(3), axis/norm(axis)*theta))\n",
"\n",
"axis, theta = [3,1,1], 2.*np.pi/3.\n",
"M0 = M(axis, theta)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<img src='data:image/png;base64,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'>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# now use rotated coords\n",
"rotated_coords_array = dot(M0,swarm.particleCoordinates.data.T).T\n",
"matvar.data[:] = conditional_function.evaluate(rotated_coords_array)\n",
"# reviz\n",
"fig.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<img src='data:image/png;base64,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'>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# or rotate then translate. note we add the `copy()` here because of a bug in underworld that will be fixed in the next release.\n",
"rotated_and_translated_coords_array = rotated_coords_array.copy() + 0.5\n",
"matvar.data[:] = conditional_function.evaluate(rotated_and_translated_coords_array)\n",
"# reviz\n",
"fig.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment