From 2c00f3ab417880a6c7eff01100149f1cc3cd39b3 Mon Sep 17 00:00:00 2001 From: LyceanEM <60020395+LyceanEM@users.noreply.github.com> Date: Wed, 29 May 2024 14:44:19 +0100 Subject: [PATCH] Removing references to open3d in the documentation. --- .../01_aperture_projection.ipynb | 10 +- .../auto_examples/01_aperture_projection.py | 12 +- .../auto_examples/01_aperture_projection.rst | 84 +- .../01_aperture_projection_codeobj.pickle | Bin 14243 -> 1016 bytes .../02_coherently_polarised_array.ipynb | 2 +- .../02_coherently_polarised_array.py | 2 +- .../02_coherently_polarised_array.rst | 117 +- ..._coherently_polarised_array_codeobj.pickle | Bin 4272 -> 1293 bytes .../04_time_domain_channel_modelling.ipynb | 2 +- .../04_time_domain_channel_modelling.py | 3 +- .../04_time_domain_channel_modelling.rst | 1088 +---------------- ...me_domain_channel_modelling_codeobj.pickle | Bin 32313 -> 2984 bytes .../auto_examples/05_array_beamforming.ipynb | 2 +- .../auto_examples/05_array_beamforming.py | 2 +- .../auto_examples/05_array_beamforming.rst | 73 +- .../05_array_beamforming_codeobj.pickle | Bin 4371 -> 1771 bytes .../auto_examples/auto_examples_jupyter.zip | Bin 100963 -> 100927 bytes .../auto_examples/auto_examples_python.zip | Bin 71857 -> 71819 bytes docs/source/frequencydomainmodels.rst | 1 + 19 files changed, 47 insertions(+), 1351 deletions(-) diff --git a/docs/source/auto_examples/01_aperture_projection.ipynb b/docs/source/auto_examples/01_aperture_projection.ipynb index cf20b05..39b2496 100644 --- a/docs/source/auto_examples/01_aperture_projection.ipynb +++ b/docs/source/auto_examples/01_aperture_projection.ipynb @@ -51,7 +51,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Geometries\nIn order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the\nopen3d trianglemesh structures can be accessed by importing the data subpackage\n\n" + "## Geometries\nIn order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the\nmeshio trianglemesh structures can be accessed by importing the data subpackage\n\n" ] }, { @@ -87,7 +87,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Structures\nLyceanEM uses a class named 'structures' to store and maniuplate joined 3D solids. Currently all that is implemented\nis the class itself, and methods to allow translation and rotation of the trianglemesh solids. A structure can be\npassed to the models to provide the environment to be considered as blockers.\nstructures are created by calling the class, and passing it a list of the open3d trianglemesh structures to be added.\n\n" + "## Structures\nLyceanEM uses a class named 'structures' to store and maniuplate joined 3D solids. Currently all that is implemented\nis the class itself, and methods to allow translation and rotation of the trianglemesh solids. A structure can be\npassed to the models to provide the environment to be considered as blockers.\nstructures are created by calling the class, and passing it a list of the meshio trianglemesh structures to be added.\n\n" ] }, { @@ -105,7 +105,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Aperture Projection\nAperture Projection is imported from the frequency domain models, requiring the aperture of interest, wavelength to\nbe considered, and the azimuth and elevation ranges. The function then returns the directivity envelope as a numpy\narray of floats, and an open3d point cloud with points and colors corresponding to the directivity envelope of the\nprovided aperture, scaling from yellow at maximum to dark purple at minimum.\n\n" + "## Aperture Projection\nAperture Projection is imported from the frequency domain models, requiring the aperture of interest, wavelength to\nbe considered, and the azimuth and elevation ranges. The function then returns the directivity envelope as a numpy\narray of floats, and a meshio point cloud with points and colors corresponding to the directivity envelope of the\nprovided aperture, scaling from yellow at maximum to dark purple at minimum.\n\n" ] }, { @@ -123,7 +123,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Open3D Visualisation\nThe resultant maximum directivity envelope is provided as both a numpy array of directivities for each angle, but\nalso as an open3d point cloud. This allows easy visualisation using :func:`open3d.visualization.draw_geometries`.\n%%\n\n" + "## Visualisation\nThe resultant maximum directivity envelope is provided as both a numpy array of directivities for each angle, but\nalso as an meshio point cloud. This allows easy visualisation using pyvista.\n%%\n\n" ] }, { @@ -148,7 +148,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Plotting the Output\nWhile the open3d visualisation is very intuitive for examining the results of the aperture projection, it is\ndifficult to consider the full 3D space, and cannot be included in documentation in this form. However, matplotlib\ncan be used to generate contour plots with 3dB contours to give a more systematic understanding of the resultant\nmaximum directivity envelope.\n\n" + "## Plotting the Output\nWhile the pyvista visualisation is very intuitive for examining the results of the aperture projection, it is\ndifficult to consider the full 3D space, and cannot be included in documentation in this form. However, matplotlib\ncan be used to generate contour plots with 3dB contours to give a more systematic understanding of the resultant\nmaximum directivity envelope.\n\n" ] }, { diff --git a/docs/source/auto_examples/01_aperture_projection.py b/docs/source/auto_examples/01_aperture_projection.py index 1a2504b..561c512 100644 --- a/docs/source/auto_examples/01_aperture_projection.py +++ b/docs/source/auto_examples/01_aperture_projection.py @@ -48,7 +48,7 @@ # Geometries # ------------------------ # In order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the -# open3d trianglemesh structures can be accessed by importing the data subpackage +# meshio trianglemesh structures can be accessed by importing the data subpackage import lyceanem.tests.reflectordata as data body, array, _ = data.exampleUAV(10e9) @@ -71,7 +71,7 @@ # LyceanEM uses a class named 'structures' to store and maniuplate joined 3D solids. Currently all that is implemented # is the class itself, and methods to allow translation and rotation of the trianglemesh solids. A structure can be # passed to the models to provide the environment to be considered as blockers. -# structures are created by calling the class, and passing it a list of the open3d trianglemesh structures to be added. +# structures are created by calling the class, and passing it a list of the meshio trianglemesh structures to be added. from lyceanem.base_classes import structures blockers = structures([body]) @@ -81,7 +81,7 @@ # ----------------------- # Aperture Projection is imported from the frequency domain models, requiring the aperture of interest, wavelength to # be considered, and the azimuth and elevation ranges. The function then returns the directivity envelope as a numpy -# array of floats, and an open3d point cloud with points and colors corresponding to the directivity envelope of the +# array of floats, and a meshio point cloud with points and colors corresponding to the directivity envelope of the # provided aperture, scaling from yellow at maximum to dark purple at minimum. from lyceanem.models.frequency_domain import aperture_projection @@ -93,10 +93,10 @@ elev_range=np.linspace(-90.0, 90.0, elev_res), ) # %% -# Open3D Visualisation +# Visualisation # ------------------------ # The resultant maximum directivity envelope is provided as both a numpy array of directivities for each angle, but -# also as an open3d point cloud. This allows easy visualisation using :func:`open3d.visualization.draw_geometries`. +# also as an meshio point cloud. This allows easy visualisation using pyvista. # %% @@ -114,7 +114,7 @@ # %% # Plotting the Output # ------------------------ -# While the open3d visualisation is very intuitive for examining the results of the aperture projection, it is +# While the pyvista visualisation is very intuitive for examining the results of the aperture projection, it is # difficult to consider the full 3D space, and cannot be included in documentation in this form. However, matplotlib # can be used to generate contour plots with 3dB contours to give a more systematic understanding of the resultant # maximum directivity envelope. diff --git a/docs/source/auto_examples/01_aperture_projection.rst b/docs/source/auto_examples/01_aperture_projection.rst index dd8b2fe..2b44a3c 100644 --- a/docs/source/auto_examples/01_aperture_projection.rst +++ b/docs/source/auto_examples/01_aperture_projection.rst @@ -49,12 +49,6 @@ be predicted using the :func:`lyceanem.models.frequency_domain.aperture_projecti import numpy as np - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 33-42 Setting Farfield Resolution and Wavelength @@ -77,18 +71,12 @@ an X band aperture. wavelength = 3e8 / 10e9 - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 48-52 Geometries ------------------------ In order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the -open3d trianglemesh structures can be accessed by importing the data subpackage +meshio trianglemesh structures can be accessed by importing the data subpackage .. GENERATED FROM PYTHON SOURCE LINES 52-58 @@ -101,12 +89,6 @@ open3d trianglemesh structures can be accessed by importing the data subpackage - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 59-60 # .. image:: ../_static/open3d_structure.png @@ -124,12 +106,6 @@ open3d trianglemesh structures can be accessed by importing the data subpackage surface_array.cell_data["Normals"] = np.array(array.cell_data["Normals"])[: (array.cells[0].data).shape[0] // 2] - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 69-75 Structures @@ -137,7 +113,7 @@ Structures LyceanEM uses a class named 'structures' to store and maniuplate joined 3D solids. Currently all that is implemented is the class itself, and methods to allow translation and rotation of the trianglemesh solids. A structure can be passed to the models to provide the environment to be considered as blockers. -structures are created by calling the class, and passing it a list of the open3d trianglemesh structures to be added. +structures are created by calling the class, and passing it a list of the meshio trianglemesh structures to be added. .. GENERATED FROM PYTHON SOURCE LINES 75-79 @@ -148,19 +124,13 @@ structures are created by calling the class, and passing it a list of the open3d blockers = structures([body]) - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 80-86 Aperture Projection ----------------------- Aperture Projection is imported from the frequency domain models, requiring the aperture of interest, wavelength to be considered, and the azimuth and elevation ranges. The function then returns the directivity envelope as a numpy -array of floats, and an open3d point cloud with points and colors corresponding to the directivity envelope of the +array of floats, and a meshio point cloud with points and colors corresponding to the directivity envelope of the provided aperture, scaling from yellow at maximum to dark purple at minimum. .. GENERATED FROM PYTHON SOURCE LINES 86-95 @@ -177,26 +147,12 @@ provided aperture, scaling from yellow at maximum to dark purple at minimum. elev_range=np.linspace(-90.0, 90.0, elev_res), ) - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - sources shape (1453, 3) - sinks shape (1369, 3) - environment_points shape (0, 3) - - - - .. GENERATED FROM PYTHON SOURCE LINES 96-101 -Open3D Visualisation +Visualisation ------------------------ The resultant maximum directivity envelope is provided as both a numpy array of directivities for each angle, but -also as an open3d point cloud. This allows easy visualisation using :func:`open3d.visualization.draw_geometries`. +also as an meshio point cloud. This allows easy visualisation using pyvista. %% .. GENERATED FROM PYTHON SOURCE LINES 104-105 @@ -217,23 +173,11 @@ also as an open3d point cloud. This allows easy visualisation using :func:`open3 ) - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - Maximum Directivity of 18.5 dBi - - - - .. GENERATED FROM PYTHON SOURCE LINES 115-121 Plotting the Output ------------------------ -While the open3d visualisation is very intuitive for examining the results of the aperture projection, it is +While the pyvista visualisation is very intuitive for examining the results of the aperture projection, it is difficult to consider the full 3D space, and cannot be included in documentation in this form. However, matplotlib can be used to generate contour plots with 3dB contours to give a more systematic understanding of the resultant maximum directivity envelope. @@ -290,22 +234,6 @@ maximum directivity envelope. fig.show() - -.. image-sg:: /auto_examples/images/sphx_glr_01_aperture_projection_001.png - :alt: Maximum Directivity Envelope - :srcset: /auto_examples/images/sphx_glr_01_aperture_projection_001.png - :class: sphx-glr-single-img - - - - - - -.. rst-class:: sphx-glr-timing - - **Total running time of the script:** (0 minutes 17.869 seconds) - - .. _sphx_glr_download_auto_examples_01_aperture_projection.py: .. only:: html diff --git a/docs/source/auto_examples/01_aperture_projection_codeobj.pickle b/docs/source/auto_examples/01_aperture_projection_codeobj.pickle index 5bfc7c03e1cc9753eff94e64d9507b640adb4839..bc405ee6ed746fda77ab65efc73c9f0849628e65 100644 GIT binary patch literal 1016 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 diff --git a/docs/source/auto_examples/02_coherently_polarised_array.ipynb b/docs/source/auto_examples/02_coherently_polarised_array.ipynb index df6c2f7..c1b4e65 100644 --- a/docs/source/auto_examples/02_coherently_polarised_array.ipynb +++ b/docs/source/auto_examples/02_coherently_polarised_array.ipynb @@ -51,7 +51,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Geometries\nIn order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the\n:class:`open3d.geometry.TriangleMesh` structures can be accessed by importing the data subpackage\n\n" + "## Geometries\nIn order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the\ntriangle structures can be accessed by importing the data subpackage\n\n" ] }, { diff --git a/docs/source/auto_examples/02_coherently_polarised_array.py b/docs/source/auto_examples/02_coherently_polarised_array.py index 148b933..d21e13c 100644 --- a/docs/source/auto_examples/02_coherently_polarised_array.py +++ b/docs/source/auto_examples/02_coherently_polarised_array.py @@ -33,7 +33,7 @@ # Geometries # ------------------------ # In order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the -# :class:`open3d.geometry.TriangleMesh` structures can be accessed by importing the data subpackage +# triangle structures can be accessed by importing the data subpackage import lyceanem.tests.reflectordata as data body, array, source_coords = data.exampleUAV(10e9) diff --git a/docs/source/auto_examples/02_coherently_polarised_array.rst b/docs/source/auto_examples/02_coherently_polarised_array.rst index aa3cb17..869fdf4 100644 --- a/docs/source/auto_examples/02_coherently_polarised_array.rst +++ b/docs/source/auto_examples/02_coherently_polarised_array.rst @@ -34,12 +34,6 @@ weights. import numpy as np import meshio - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 18-27 Setting Farfield Resolution and Wavelength @@ -62,18 +56,12 @@ an X band aperture. wavelength = 3e8 / 10e9 - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 33-37 Geometries ------------------------ In order to make things easy to start, an example geometry has been included within LyceanEM for a UAV, and the -:class:`open3d.geometry.TriangleMesh` structures can be accessed by importing the data subpackage +triangle structures can be accessed by importing the data subpackage .. GENERATED FROM PYTHON SOURCE LINES 37-43 @@ -86,12 +74,6 @@ In order to make things easy to start, an example geometry has been included wit - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 44-45 # .. image:: ../_static/open3d_structure.png @@ -124,12 +106,6 @@ In order to make things easy to start, an example geometry has been included wit - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 69-70 .. image:: ../_static/sourcecloudfromshapeuav.png @@ -162,26 +138,6 @@ does not produce consistently spaced results. ) - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\empropagation.py:3669: ComplexWarning: Casting complex values to real discards the imaginary part - uvn_axes[2, :] = point_vector - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\empropagation.py:3686: ComplexWarning: Casting complex values to real discards the imaginary part - uvn_axes[0, :] = np.cross(local_axes[2, :], point_vector) / np.linalg.norm( - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\empropagation.py:3708: ComplexWarning: Casting complex values to real discards the imaginary part - uvn_axes[1, :] = np.cross(point_vector, uvn_axes[0, :]) / np.linalg.norm( - sources shape (67, 3) - sinks shape (32761, 3) - environment_points shape (0, 3) - - - - .. GENERATED FROM PYTHON SOURCE LINES 93-101 Storing and Manipulating Antenna Patterns @@ -209,38 +165,6 @@ plottype='Contour' to the function. UAV_Static_Pattern.display_pattern() - - -.. rst-class:: sphx-glr-horizontal - - - * - - .. image-sg:: /auto_examples/images/sphx_glr_02_coherently_polarised_array_001.png - :alt: Etheta - :srcset: /auto_examples/images/sphx_glr_02_coherently_polarised_array_001.png - :class: sphx-glr-multi-img - - * - - .. image-sg:: /auto_examples/images/sphx_glr_02_coherently_polarised_array_002.png - :alt: Ephi - :srcset: /auto_examples/images/sphx_glr_02_coherently_polarised_array_002.png - :class: sphx-glr-multi-img - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\beamforming.py:1100: RuntimeWarning: divide by zero encountered in log10 - logdata = 20 * np.log10(data) - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\beamforming.py:1103: RuntimeWarning: invalid value encountered in subtract - logdata -= np.nanmax(logdata) - - - - .. GENERATED FROM PYTHON SOURCE LINES 113-115 .. image:: ../_static/sphx_glr_02_coherently_polarised_array_001.png @@ -254,51 +178,12 @@ plottype='Contour' to the function. UAV_Static_Pattern.display_pattern(plottype="Contour") - - -.. rst-class:: sphx-glr-horizontal - - - * - - .. image-sg:: /auto_examples/images/sphx_glr_02_coherently_polarised_array_003.png - :alt: Etheta - :srcset: /auto_examples/images/sphx_glr_02_coherently_polarised_array_003.png - :class: sphx-glr-multi-img - - * - - .. image-sg:: /auto_examples/images/sphx_glr_02_coherently_polarised_array_004.png - :alt: Ephi - :srcset: /auto_examples/images/sphx_glr_02_coherently_polarised_array_004.png - :class: sphx-glr-multi-img - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - C:\Users\lycea\.conda\envs\SpaceBasedSolar\lib\site-packages\matplotlib\contour.py:1479: UserWarning: Warning: converting a masked element to nan. - self.zmax = float(z.max()) - C:\Users\lycea\.conda\envs\SpaceBasedSolar\lib\site-packages\matplotlib\contour.py:1480: UserWarning: Warning: converting a masked element to nan. - self.zmin = float(z.min()) - C:\Users\lycea\PycharmProjects\LyceanEM-Python\lyceanem\electromagnetics\beamforming.py:1227: UserWarning: No contour levels were found within the data range. - CS4 = ax.contour( - - - - .. GENERATED FROM PYTHON SOURCE LINES 119-121 .. image:: ../_static/sphx_glr_02_coherently_polarised_array_003.png .. image:: ../_static/sphx_glr_02_coherently_polarised_array_004.png -.. rst-class:: sphx-glr-timing - - **Total running time of the script:** (0 minutes 23.464 seconds) - - .. _sphx_glr_download_auto_examples_02_coherently_polarised_array.py: .. only:: html diff --git a/docs/source/auto_examples/02_coherently_polarised_array_codeobj.pickle b/docs/source/auto_examples/02_coherently_polarised_array_codeobj.pickle index c773f253a27b60746285821987f9b50047a527fb..f63fc96e6f477c776c6c6fca097ca39889fa821f 100644 GIT binary patch literal 1293 zcmcIj-D?yv5Etos=WUNdQGBVO2vQM)SPJ4x5ej`Nh=RV!GG=Gpg>16s1G<9XV-NCX z{C`bu@21_heu3sGnVH{5GLx^__v_iU#x|B^esee%rdHa9dgiB%DYyV*!oufqk0+gI zcw@uDfzM^fL?cZH90!Sd;-?g;Z~9ESHpUlzKa}eAKuvk=}s|H0$;Hz?x z=AP&|g2a|Ze<%#AG=6d@d0&*Og+?ZYJESm+zQBOiu)2A)HCYEnu677BO_&iP8;+y; z`&7SGf(3>r&~^gfzI;bln4OD7><(GCXslrxtJFEA6F%8~NR-KTB^21bXT&yH2Szp? zpJ9yEj$5bE5N38R7Gbx^!3QunbTd{*>8C`KZvPpzIwQ%3<4AU&>bF2zloE;#tVJzJ z`%>bU23`>19+~_}huMFcnuDc<(>RyU$-+leEn3~P^`>%i_-xE5r#W(=Tv=(=ni{$^ z`n&Oa#UZN7QSKrwD;v`Z V=r2#n#YB9f-#Co2uh+7U{Q!VC@tFVs literal 4272 zcmcgwJ%}Vl6kc&=XWZGj)pKQ!W5rVuPT@MZO#~AUZUqB>@bnUqrl$MNbgeaAeO1-# z&Vgtox6oi<8wi3R9GIG!3MQr|rY5GQCW5}|pX#pep4)NuxJ|aV>%H%N@3&s>=l!qm zKe>_pBqNVA2A-lklxZ@0NBAJXzezonewDubUV1fo;e#8u-CK$%>bdU{r9gy^Pi4f& z!j1C3(~r`tpQ30lBy&iU=SZj^3`u$15>Gbg+>aTGKEoCskPzn1gh+5bMx+EJvYiXK zGT=fj7aLNU>!hd22%q63V$`E5J&lo1FgTk^@I*2!Ii$fTcq$m51{X^8OMG&K!8!0- zE}-5L?g+BGI*4U_uh4^JIAPrT7=$cBi>_=*C1Ov-0^{=_>q~jn9czGDEUp+9BO(M@ zI36&jiR2;eF)Ed2Fr37cDT;N2F27VLk!0-gXyNz(k$$N752taM)mcmT6)Rjrqlz|q z83y8CGo;3n$HD_Q;xtqhtwHE#Y&Cj6jOSV4aVlk|}w?GD3X?uIBY!)_Et4#Olz7`rN&m)sk=G~OsudK2dXQCB=~aC zIBwYyE*DsJD&T%A5!8y{pv1BQ$c(w(VH8l4+U}OPW5Tvc?z(!Kl%4%JHdKqiu@SG& z4AVaKm+J-gUNvqTU{*{&3&u6cVL6!B%;qvE%j6f9$p*P~O9+z7?P_(Zi!^VQ?$mv0 za(zi#`1cY$0nLKIEhwm+s!3;tW)U!?9w`Dpx|6n?x)tjbLTPNo(*Dge>fPS>7Ka!gL$uil+ zaQ(s^ViDa1!S%$@`ySq&|7Vo_TqG&i?B_^URsCYpc+n%wiy2YiPKlUOV18wE`6ltJ zWuglN?OiGNJqMReVA7cixD!L@EnJ_^2@Un-zk*PHCE%`xH~#V2gY>t88%cKb1?*tQ z%p(Rk3|8^%cgwS_nlgH{Z#+^Um2?D5^-j-4cGIIbX9$#@?Apu1N*mT6m0Q_0xAKbd zr%^07I*%jcT5*|OYyH*iufhlV6;y2d}IBrE^;k+*>31AS{#)%b3Z%ZG9klTQA1;V~ZjQ^DslAW?1a-R(R^<1em&tqJW` zgz}i48*#5fgydO6Lw`>@&DFPzUDv%Zwp2CO{R){R*R10va_jrpSZe;O0AqCqNwoZY I&2sGg2R-Cl7XSbN diff --git a/docs/source/auto_examples/04_time_domain_channel_modelling.ipynb b/docs/source/auto_examples/04_time_domain_channel_modelling.ipynb index ba75866..c6ba3a4 100644 --- a/docs/source/auto_examples/04_time_domain_channel_modelling.ipynb +++ b/docs/source/auto_examples/04_time_domain_channel_modelling.ipynb @@ -69,7 +69,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Position Transmitter\nrotate the transmitting antenna to the desired orientation, and then translate to final position.\n:func:`lyceanem.geometry.geometryfunctions.open3drotate` allows both the center of rotation to be defined, and\nensures the right syntax is used for Open3d, as it was changed from 0.9.0 to 0.10.0 and onwards.\n\n\n" + "## Position Transmitter\nrotate the transmitting antenna to the desired orientation, and then translate to final position.\n:func:`lyceanem.geometry.geometryfunctions.translate_mesh`, :func:`lyceanem.geometry.geometryfunctions.mesh_rotate` and :func:`lyceanem.geometry.geometryfunctions.mesh_transform` are included, allowing translation, rotation, and transformation of the meshio objects as required.\n\n\n" ] }, { diff --git a/docs/source/auto_examples/04_time_domain_channel_modelling.py b/docs/source/auto_examples/04_time_domain_channel_modelling.py index 94e1c20..6737487 100644 --- a/docs/source/auto_examples/04_time_domain_channel_modelling.py +++ b/docs/source/auto_examples/04_time_domain_channel_modelling.py @@ -51,8 +51,7 @@ # Position Transmitter # ---------------------- # rotate the transmitting antenna to the desired orientation, and then translate to final position. -# :func:`lyceanem.geometry.geometryfunctions.open3drotate` allows both the center of rotation to be defined, and -# ensures the right syntax is used for Open3d, as it was changed from 0.9.0 to 0.10.0 and onwards. +# :func:`lyceanem.geometry.geometryfunctions.translate_mesh`, :func:`lyceanem.geometry.geometryfunctions.mesh_rotate` and :func:`lyceanem.geometry.geometryfunctions.mesh_transform` are included, allowing translation, rotation, and transformation of the meshio objects as required. # rotation_vector1 = np.radians(np.asarray([90.0, 0.0, 0.0])) rotation_vector2 = np.radians(np.asarray([0.0, 0.0, -90.0])) diff --git a/docs/source/auto_examples/04_time_domain_channel_modelling.rst b/docs/source/auto_examples/04_time_domain_channel_modelling.rst index 66209d5..4ba7b78 100644 --- a/docs/source/auto_examples/04_time_domain_channel_modelling.rst +++ b/docs/source/auto_examples/04_time_domain_channel_modelling.rst @@ -35,12 +35,6 @@ rather than an aperture antenna such as a horn. import numpy as np import meshio - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 18-21 Frequency and Mesh Resolution @@ -67,12 +61,6 @@ Frequency and Mesh Resolution wavelength = 3e8 / model_freq - - - - - - .. GENERATED FROM PYTHON SOURCE LINES 37-40 Setup transmitters and receivers @@ -94,37 +82,15 @@ Setup transmitters and receivers ) - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - HIHIH - - Number of points: 8 - Number of cells: - triangle: 12 - HIHIH - - Number of points: 8 - Number of cells: - triangle: 12 - - - - -.. GENERATED FROM PYTHON SOURCE LINES 51-57 +.. GENERATED FROM PYTHON SOURCE LINES 51-56 Position Transmitter ---------------------- rotate the transmitting antenna to the desired orientation, and then translate to final position. -:func:`lyceanem.geometry.geometryfunctions.open3drotate` allows both the center of rotation to be defined, and -ensures the right syntax is used for Open3d, as it was changed from 0.9.0 to 0.10.0 and onwards. +:func:`lyceanem.geometry.geometryfunctions.translate_mesh`, :func:`lyceanem.geometry.geometryfunctions.mesh_rotate` and :func:`lyceanem.geometry.geometryfunctions.mesh_transform` are included, allowing translation, rotation, and transformation of the meshio objects as required. -.. GENERATED FROM PYTHON SOURCE LINES 57-68 +.. GENERATED FROM PYTHON SOURCE LINES 56-67 .. code-block:: Python @@ -140,19 +106,13 @@ ensures the right syntax is used for Open3d, as it was changed from 0.9.0 to 0.1 transmitting_antenna_surface_coords = GF.mesh_rotate(transmitting_antenna_surface_coords, rotation_vector2) transmitting_antenna_surface_coords = GF.translate_mesh(transmitting_antenna_surface_coords, np.asarray([2.695, 0, 0])) - - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 69-72 +.. GENERATED FROM PYTHON SOURCE LINES 68-71 Position Receiver ------------------ rotate the receiving horn to desired orientation and translate to final position. -.. GENERATED FROM PYTHON SOURCE LINES 72-79 +.. GENERATED FROM PYTHON SOURCE LINES 71-78 .. code-block:: Python @@ -164,19 +124,13 @@ rotate the receiving horn to desired orientation and translate to final position receiving_antenna_surface_coords = GF.translate_mesh(receiving_antenna_surface_coords, np.asarray([0, 1.427, 0])) - - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 80-83 +.. GENERATED FROM PYTHON SOURCE LINES 79-82 Create Scattering Plate -------------------------- Create a Scattering plate a source of multipath reflections -.. GENERATED FROM PYTHON SOURCE LINES 83-95 +.. GENERATED FROM PYTHON SOURCE LINES 82-94 .. code-block:: Python @@ -193,29 +147,13 @@ Create a Scattering plate a source of multipath reflections - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - meshing reflector - args 0.3 0.3 0.006 - majorsize 0.3 - minorsize 0.3 - thickness 0.006 - - - - -.. GENERATED FROM PYTHON SOURCE LINES 96-99 +.. GENERATED FROM PYTHON SOURCE LINES 95-98 Specify Reflection Angle -------------------------- Rotate the scattering plate to the optimum angle for reflection from the transmitting to receiving horn -.. GENERATED FROM PYTHON SOURCE LINES 99-110 +.. GENERATED FROM PYTHON SOURCE LINES 98-109 .. code-block:: Python @@ -231,18 +169,12 @@ Rotate the scattering plate to the optimum angle for reflection from the transmi - - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 111-113 +.. GENERATED FROM PYTHON SOURCE LINES 110-112 Visualise the Scene Geometry ------------------------------ -.. GENERATED FROM PYTHON SOURCE LINES 113-132 +.. GENERATED FROM PYTHON SOURCE LINES 112-131 .. code-block:: Python @@ -266,24 +198,13 @@ Visualise the Scene Geometry plotter.show() - - -.. image-sg:: /auto_examples/images/sphx_glr_04_time_domain_channel_modelling_001.png - :alt: 04 time domain channel modelling - :srcset: /auto_examples/images/sphx_glr_04_time_domain_channel_modelling_001.png - :class: sphx-glr-single-img - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 133-136 +.. GENERATED FROM PYTHON SOURCE LINES 132-135 Specify desired Transmit Polarisation -------------------------------------- The transmit polarisation has a significant effect on the channel characteristics. In this example the transmit horn will be vertically polarised, (e-vector aligned with the z direction) -.. GENERATED FROM PYTHON SOURCE LINES 136-140 +.. GENERATED FROM PYTHON SOURCE LINES 135-139 .. code-block:: Python @@ -292,19 +213,13 @@ The transmit polarisation has a significant effect on the channel characteristic desired_E_axis[0, 1] = 1.0 - - - - - - -.. GENERATED FROM PYTHON SOURCE LINES 141-144 +.. GENERATED FROM PYTHON SOURCE LINES 140-143 Time Domain Scattering ---------------------------- -.. GENERATED FROM PYTHON SOURCE LINES 144-222 +.. GENERATED FROM PYTHON SOURCE LINES 143-221 .. code-block:: Python @@ -387,947 +302,13 @@ Time Domain Scattering - - - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - 0%| | 0/91 [00:00KXBB5}>5=I#5I94p@O+EIidYbEPDM6m7GB2v8 zUbTv~&9re%wyfvEt`o_uZO-ZlzWHe(MIu~tRIz{ zTb*Us5H&>R1ml}RTv5^Ak7B&$@6@v-J@IJ+G^wEbtx3$p@Do)r4^9oA9zi~dN zkX%}-ZhnFJ17dyws%)5o2E~O*?sj_>2(fC6$`F z_wMvwf?|OAoG|D`F|~gvr=2`Nd`XDw(02#zvHqN4v&q@ffgTtx+I>#^c*dmO-M&S% zlU5wW^A*|SPJz`#)*}=Kwwi25IK`o9UI4@4fIBiqVz%j4v_6sX^agqts&%vY> z0kCRA2NMOm1fqUSxTSTbOk8QgEeR`qUkB)yXn$>(-}IqIxK-V~F~dP%B(bw%p)~?#FCS8US8?9PrY&Cvby@F&}#gxcbHPghIeNLznj! z#-tSo_P>#Rgo$cd9WzKKc$kysAl2Uqhf!@sni6L0rGb|}$l5;>;O-3$Mmb)@`x*R6 zwsS1v;1x3V5}04Uc%BR%Kwp#Vv6rqyc8dn*{IlX2y;T14W%&VKT6f5KxNPI_LAUNR xSmS?F0PkKTfc>XJX!cd#5C4$s3+3)z`}-<|HwN|l=s*vhzvvbAZwR1_{{xL2d@le1 literal 32313 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
  • y{3B~xOj)K1apVaZF(O`Xz%BGbc`o1ape zlR9PcLw1dcak_$uJ=}Q(dO4YS#RZAUsX(2RA2Q1_3QhjNDL=WF*HJP)ai4|M61CiS%HQW zWI|k+!QR6JWM^>pu;!KK7F15j;Lgy7tK5~b5n~m(u*=vK#r7PmUVQ2%d&xF6D!~rGlMuN z)_TI#vIEtoWTvHoO!?0yDdq>40ePS*wJ0APT5~w17=tJK@-{MML`?q3JCP|PcJeB| eUZ#ws$=ms>nKIHRM+vm^WaNN#ca$cU>Hz?a&#NW? literal 4371 zcmcgvO^Dr86dv36lfE}~T4g|_6hVY>VW>_SkZvrUryB>WR*Q=o?n_RRJ56%q&CU2; zLD1a{WFy9f;Kr>RK@bGNjo`+OTQ_dqx^?Hd`MJrB@69}?%yc!qIp;gy`9JT|{+Gtp zwc=kkwpkE>EhvkUJR85o9pK>XQd{I-AfDw^r zgOE9CfDgtrrGcOlWW9W|5}$FA`=iXDiDd^QN%Es?jDN!{4ya8X^=-2Cy@t8va~&n9Ktz4f7+g1ulSMd5>hy@ zLP-1*RGwEVLo~92!d9b@fbc<(#zK*|otrwTmz07r4Ve89c+$jrln9>MBIS@stxXle zDM_HrtNb!v`lSp}8I%r~QG>~(?^G-xGay(gn70(~F&3$ejK`_dP=Cg{Ei>?XRV=$S ziHWd%;JW*-RWKz*L*ZzNyQA3k%d|cy8Ul;4w4i@hlBE{pUM{2^I&WAhqaEz-c{@k87bzyeB*e~hZ<1HP>hU zdP~w^(|w$O+m7V>ct$lS&E%nGvP13^Myri5#JoGyb(^%W*d3p1mC!3Nv_h!+6tV%@ z2+8b!oA^pIaZy5O7QU{&L-zE$0)XSPu_msI%Mc=a-k4jy-@ef-EJQ(zXSe4Dlg>g} zxaGdBSdvUOe=#4nUuoPM)-PIczSHW(C}fIl+}@wxYeGXB!HnRoq5=J&$qewSn0810 zkDAEPg9ww+8Am_qG7CBXtP(26(IeojHRGPGZX&C`RxHMGHwd2mSOw4TlI~VmX9y0Po#?zbUunp8ctL zHfkxON7s}`0uqs!99(%cGA<2CZ%z=XJ=xsD?HZ=xZj-gWB5BofUrz5YjouO*WO{b( zj;mfT`5UlV=+YAj_Cozsn6%;J&s4P7eMiYp&r`n+AEgWMn?@t&HnYe x(j@MU)q*j3C;7Ht_&&W)=|!5XdUs8?ll{>X(ih1B1>+aXucl+|=TX%>2#TJd@ak;!@rYSq26WR%V#~v7J$M^YLp-7&n(|EMVg(DauUDOV3H& zeDLUH#?AbOP2Rj9P5&afh4Sqg81gsItBK~GY~{~CIoC{gGP}R#Bo?JAWacI3l%}Mn=qM!S_b3i(M{smUe93W>!EMX80QnMJ87K(B(J5-*p6!sZ-*E5^-_JEe`l zjxFBr!el4Kz+ktTd(T8p7LeP3-Z^#JDC0jgsDtHe0nPMJ|@`fm`A!<})u Tr#qwSbl)yU0k-gVMxZ7DhDpd{ delta 605 zcmdl#h3)YaHt_&&W)=|!5MYbn8_^n@ULK*wz!0%foR5bszaTZwIAyao&m=Y|d$Kl< zDxVpJkEstaS1s%qpjGOrOF>P)&KJ3Bko3%IMF_Vb7 zrac3L=H}3vXzqH5-9`B&i6yBC3W+&6`Q^n5N%Y z3MKgpNvR4cscD&csVO=NiFqk8d8v8DrA4X5U@b+N=@}&o#g%y_i4_W&#R{dxsVNF+ z`9%s~pMi7~D`b`^lmn^cj70UkbdYpWey)Ono~51v$an)iLjxcSXtF|nUU_0sO0izd z@0gNlA%XTnYDWC)pFpz)|2nX95+iNCA)o4tg-@(YE05TQs44_kh z2oAP2e%U>lcaO~U=N*h%Y~9xw7!1rNH~f{E-qFd(Gu^(EQI4^CdR!-C2(zLx<8&!y gMy2W3I~lc@b=(=JtGY9)PS@;W6kw}vX9SuE0I}%4I{*Lx diff --git a/docs/source/auto_examples/auto_examples_python.zip b/docs/source/auto_examples/auto_examples_python.zip index 226c03ed955081282e468f4bd699605204348f8b..b2467c070d5439a33d7cffa9dcb1580f57a78122 100644 GIT binary patch delta 605 zcmdnEk)?Yhi*$fDGm8iV2xOJ+jkveaL}#KT0|N+4PUjb6l-X$hfP*bJwKyX)f3qxS z6bp=9%e$44T>&a##eaj5EiALRG%;uL0|({F3T!NsZ>aH24iPMZs-JvD(3riTvMjT> zByqF0kP0K56DqutjTdBh#iRQPDS`|PDVw>a+*vtFiZT=P(sNQLzdO5lvy_6ai4aIp z+QqMnMD!RKKv3>BTtrSp#2pCKX z;7EfI+Zs!F zjywgZj3xgKMmB$tDwoLug6p7)CLa+ro_zeA&gOrDDvU6Vn!+pDctJLN(7s;WD9FIj zxcR=MJL}}dXHRUtD6eb6mzTabV!cFM%>`Wsh6}ozc|wHQ>mk+@<(DLuq$VgN=H%p; z7b_&?mt-iEWTYx2r{QW#*-(=qM!SrSNhoE2QQX zmlmZKgEbXpre~BW6j$bzBvvS77Auq%r=}>RkDaCp~OC~EO>1?))kx~PDa#yGStpEHB4F5ML zH07{?Jz3lt-UF6{2l4dlqKsDZC}9E&7X@%!K!|OPU#1&~G5RuYo?a)$Xs&=7Mhpzf zC~9p(CJTh9PX8sw$OASN?g*em#8FiGO;;6XbYW|n#K2%+HvOPDqw4f2;*4@k1#2g# mtyP