Closed nathanielatom closed 2 months ago
I will look into this.
good knew I have found a solution!!
Care to elaborate?
Tommorow I will create a PR. The problem was in scaling. I had to add a get_start and get_end methods for cone and arrow3d classes.
This is the code I have added
Cool thank you! I tried out the PR and it works beautifully.
Description of bug / unexpected behavior
In 2D, put_start_and_end_on can be used to animate the tip of an arrow. In 3D the size/volume of the arrow appears to increase without bound, and also rotates much more than expected.
Expected behavior
The same behaviour as 2D but in 3D for an Arrow3D.
How to reproduce the issue
Code for reproducing the problem
```py from manim import * import numpy as np class ArrowAnimation(ThreeDScene): def construct(self): # Define the start and end points start_point = np.array([0, 0, 0]) framerate = 10 # Hz time = np.arange(0, 8, 1/framerate) period = 10 # s end_points = np.array([np.zeros_like(time), np.sin(2 * np.pi * time / period), np.cos(2 * np.pi * time / period)]).T # Create an arrow arrow = Arrow3D(start=start_point, end=end_points[0]) # end_points *= np.linalg.norm(arrow.get_vector()) / np.linalg.norm(arrow.end) # adjust end points so that the tip of the arrow is at the end point arrow.put_start_and_end_on(start_point, end_points[0]) # Create a traced path traced_path = TracedPath(arrow.get_end, stroke_color=ORANGE, stroke_width=2) # Add the arrow and traced path to the scene self.add(arrow, traced_path) # Animate the movement of the arrow for end_point in end_points: self.play( arrow.animate.put_start_and_end_on(start_point, end_point), rate_func=linear, run_time=1/framerate ) self.wait() ```Additional media files
Images/GIFs
https://github.com/ManimCommunity/manim/assets/3137319/7ab8b408-38a6-408b-b1f2-d0e8e7feca5bWorking 2D Version
Code for reproducing the problem
```py from manim import * import numpy as np class ArrowAnimation(Scene): def construct(self): # Define the start and end points start_point = np.array([0, 0, 0]) framerate = 10 # Hz time = np.arange(0, 8, 1/framerate) period = 10 # s end_points = np.array([2 * np.sin(2 * np.pi * time / period), 2 * np.cos(2 * np.pi * time / period), np.zeros_like(time)]).T # Create an arrow arrow = Arrow(start=start_point, end=end_points[0]) # end_points *= np.linalg.norm(arrow.get_vector()) / np.linalg.norm(arrow.end) # adjust end points so that the tip of the arrow is at the end point arrow.put_start_and_end_on(start_point, end_points[0]) # Create a traced path traced_path = TracedPath(arrow.get_end, stroke_color=ORANGE, stroke_width=2) # Add the arrow and traced path to the scene self.add(arrow, traced_path) # Animate the movement of the arrow for end_point in end_points: self.play( arrow.animate.put_start_and_end_on(start_point, end_point), rate_func=linear, run_time=1/framerate ) self.wait() ```Additional media files
Images/GIFs
https://github.com/ManimCommunity/manim/assets/3137319/52e66af5-dfdb-4181-8475-fbc954c54417System specifications
System Details
- OS (with version, e.g., Windows 10 v2004 or macOS 10.15 (Catalina)): - RAM: - Python version (`python/py/python3 --version`): - Installed modules (provide output from `pip list`): ``` - MacOS 13.6.4 (22G513) (Ventura) - RAM: 16 GB - Python 3.9.10 - Pip modules: Package Version Editable project location --------------------------------- ------------------- ------------------------------------------------------------------------- absl-py 1.0.0 aiohttp 3.8.1 aiosignal 1.2.0 alabaster 0.7.12 alembic 1.7.6 altair 4.1.0 annoy 1.17.1 anyio 3.6.2 app-model 0.1.1 appdirs 1.4.4 appnope 0.1.2 APScheduler 3.7.0 argon2-cffi 20.1.0 arms-parser 0.2.4 /Users/Atom/Documents/AEL Backup/Aercoustics/code/arms-parser/source arrow 1.3.0 arviz 0.16.1 asl_bloch_sim 0.0.1 /Users/Atom/Library/CloudStorage/Dropbox/Skule/EECE597/source asteval 0.9.31 astropy 5.3.4 astropy-iers-data 0.2024.2.12.0.31.0 astroquery 0.4.2 asttokens 2.0.5 astunparse 1.6.3 async-generator 1.10 async-lru 2.0.4 async-timeout 4.0.2 attrs 23.2.0 autograd 1.3 autopage 0.5.0 autoray 0.2.5 aws-requests-auth 0.4.2 awscli 1.31.11 Babel 2.14.0 backcall 0.2.0 bcrypt 3.2.0 beautifulsoup4 4.9.3 biocircuits 0.1.5 black 22.1.0 blackjax 0.9.6 bleach 3.3.0 blinker 1.7.0 Bloch-Simulator-Library 2.0 bokeh 3.3.4 boltons 23.0.0 boto3 1.33.11 botocore 1.33.11 Bottleneck 1.3.7 Brotli 1.1.0 build 0.10.0 bump2version 1.0.1 bumpversion 0.5.3 cached-property 1.5.2 cachetools 4.2.4 cachey 0.2.1 canvasapi 3.2.0 certifi 2023.7.22 cffi 1.15.1 cftime 1.6.2 charset-normalizer 3.2.0 click 8.1.7 click-default-group 1.2.4 cliff 3.10.0 clockwork 0.0.1 /Users/Atom/Library/CloudStorage/Dropbox/Sailbot/code/clockwork/source cloudpickle 2.0.0 cloup 2.1.2 cmaes 0.8.2 cmd2 2.3.3 colorama 0.4.3 colorcet 2.0.6 colorio 0.11.2 colorlog 6.6.0 colorspacious 1.1.2 conda 23.7.4 conda-package-handling 2.2.0 conda_package_streaming 0.9.0 confuse 1.4.0 cons 0.4.5 contourpy 1.1.1 convertdate 2.3.2 coverage 5.5 cplot 0.9.3 cryptography 41.0.4 custom-inherit 2.3.1 cycler 0.11.0 Cython 0.29.33 dash 1.20.0 dash-bootstrap-components 0.12.0 dash-colorscales 0.0.4 dash-core-components 1.16.0 dash-daq 0.5.0 dash-html-components 1.1.3 dash-renderer 1.9.1 dash-table 4.11.3 dask 2022.2.0 database-manager 0.2.1 /Users/Atom/Documents/AEL Backup/Aercoustics/code/database-manager/source datashader 0.13.0 datashape 0.5.2 debugpy 1.5.1 decorator 5.1.1 defusedxml 0.6.0 differint 0.3.2 dill 0.3.4 distributed 2022.2.0 dlx 1.0.4 docopt 0.6.2 docplex 2.22.213 docstring-parser 0.13 docutils 0.16 dominate 2.6.0 dtale 1.48.0 easydev 0.12.0 einops 0.4.1 einsteinpy 0.4.0 entrypoints 0.3 eqtk 0.1.1 et-xmlfile 1.0.1 etuples 0.3.8 event-processing 0.3.2 /Users/Atom/Documents/AEL Backup/Aercoustics/code/event-processing/source exceptiongroup 1.0.0rc9 executing 0.8.2 FALCONN 1.3.1 fancycompleter 0.9.1 fastdtw 0.3.4 fastjsonschema 2.15.1 fastprogress 1.0.3 fCWT 0.1.17 filelock 3.9.0 Flask 2.1.3 Flask-Compress 1.9.0 flask-ngrok 0.0.25 flatbuffers 2.0 fonttools 4.42.1 fqdn 1.5.1 freetype-py 2.2.0 frozenlist 1.3.1 fsspec 2022.1.0 future 0.18.2 gast 0.5.3 githubdl 0.1.6 glcontext 2.5.0 gmpy2 2.1.2 google-api-core 2.11.0 google-api-python-client 2.82.0 google-auth 2.16.2 google-auth-httplib2 0.1.0 google-auth-oauthlib 0.4.6 google-pasta 0.2.0 googleapis-common-protos 1.59.0 googledrivedownloader 0.4 graphviz 0.16 greenlet 1.1.2 grpcio 1.43.0 h11 0.14.0 h5netcdf 1.1.0 h5py 3.2.1 HeapDict 1.0.1 hijri-converter 2.1.2 holidays 0.11.1 hsluv 5.0.2 html5lib 1.1 htmlmin 0.1.12 httplib2 0.22.0 humanize 3.2.0 ibroadcast 1.1.2.dev0 idna 3.4 ImageHash 4.2.0 imageio 2.12.0 imagesize 1.4.1 importlib-metadata 4.10.1 importlib-resources 6.1.0 in-n-out 0.1.6 inflection 0.5.1 influxdb 5.3.1 iniconfig 1.1.1 ipdb 0.13.13 ipykernel 6.9.1 ipympl 0.9.2 ipython 8.15.0 ipython-genutils 0.2.0 ipywidgets 8.0.4 iso8601 1.0.2 isodate 0.6.1 isoduration 20.11.0 isosurfaces 0.1.0 itsdangerous 2.1.2 jax 0.4.4 jaxlib 0.4.4 jaxopt 0.6 jdcal 1.4.1 jedi 0.17.2 Jinja2 3.1.2 jmespath 0.10.0 joblib 1.2.0 jplephem 2.15 json5 0.9.5 jsonpatch 1.33 jsonpickle 3.0.2 jsonpointer 2.1 jsonschema 4.20.0 jsonschema-specifications 2023.12.1 jupyter 1.0.0 jupyter-bokeh 3.0.7 jupyter_client 7.4.8 jupyter-console 6.2.0 jupyter-contrib-core 0.3.3 jupyter-contrib-nbextensions 0.5.1 jupyter_core 5.1.2 jupyter-events 0.9.0 jupyter-highlight-selected-word 0.2.0 jupyter-latex-envs 1.4.6 jupyter-lsp 2.2.1 jupyter-nbextensions-configurator 0.6.1 jupyter-packaging 0.7.12 jupyter_server 2.12.4 jupyter_server_terminals 0.5.1 jupyter-tabnine 1.2.2 jupyterlab 4.0.10 jupyterlab-pygments 0.1.2 jupyterlab_server 2.25.2 jupyterlab-widgets 3.0.5 kaleido 0.2.1 keras 2.8.0 Keras-Preprocessing 1.1.2 keyring 23.0.1 kiwisolver 1.4.5 korean-lunar-calendar 0.2.1 lcapy 0.98 lckr-jupyterlab-variableinspector 3.0.9 libclang 13.0.0 llvmlite 0.41.0 lmfit 1.2.2 locket 0.2.1 logical-unification 0.4.5 lxml 4.6.3 lz4 3.1.3 m2r2 0.2.7 m3u8 2.0.0 magicgui 0.4.0 Mako 1.1.6 manim 0.18.0 ManimPango 0.5.0 mapbox-earcut 1.0.1 Markdown 3.3.6 markdown-it-py 2.1.0 MarkupSafe 2.1.1 matplotlib 3.8.2 matplotlib-inline 0.1.6 matplotx 0.3.10 mdurl 0.1.2 memory-profiler 0.58.0 meshio 4.4.6 mimeparse 0.1.3 miniKanren 1.0.3 missingno 0.4.2 mistune 2.0.4 mkl-service 2.4.0 mock 5.1.0 moderngl 5.10.0 moderngl-window 2.4.4 monai 0.8.1 more-itertools 8.10.0 mpmath 1.3.0 msgpack 1.0.2 multidict 6.0.2 multipledispatch 0.6.0 multiprocess 0.70.12.2 multitasking 0.0.9 munkres 1.1.4 mutagen 1.46.0 mypy-extensions 0.4.3 napari 0.4.17 napari-console 0.0.7 napari-plugin-engine 0.2.0 napari-svg 0.1.6 natsort 7.1.1 nbclassic 0.4.8 nbclient 0.5.2 nbconvert 7.2.7 nbformat 5.7.1 nest-asyncio 1.5.6 netCDF4 1.6.1 networkx 3.2.1 ngt 2.0.4 nibabel 3.2.2 nilearn 0.9.0 nmslib 2.1.1 notebook 6.5.2 notebook_shim 0.2.2 npe2 0.6.2 npTDMS 0.18.1 npx 0.1.0 ntlm-auth 1.5.0 numba 0.58.1 numdifftools 0.9.41 numexpr 2.8.7 numpy 1.26.4 numpydoc 1.5.0 numpyro 0.11.0 nvflare 2.0.19 nvm-tools 0.5.9 /Users/Atom/Documents/AEL Backup/Aercoustics/code/nvm-tools/source oauthlib 3.2.0 objgraph 3.5.0 opencv-python 4.5.4.60 openpyxl 3.0.7 opt-einsum 3.3.0 optuna 2.10.0 outcome 1.3.0.post0 overrides 7.4.0 packaging 23.2 pandas 2.2.1 pandas-profiling 2.11.0 pandocfilters 1.4.3 param 1.12.0 paramiko 2.7.2 parse 1.19.0 parso 0.7.1 partd 1.2.0 path-and-address 2.0.1 pathspec 0.9.0 patsy 0.5.1 pbr 5.5.1 PennyLane 0.18.0 PennyLane-Lightning 0.18.0 pexpect 4.8.0 pgmpy 0.1.22 phik 0.11.2 pickleshare 0.7.5 Pillow 9.4.0 Pint 0.18 pip 24.0 platformdirs 2.6.2 plotly 5.18.0 pluggy 1.3.0 ply 3.11 polars 0.20.15 poliastro 0.17.0 pooch 1.6.0 ppscore 1.3.0 prettytable 3.0.0 profimp 0.1.0 prometheus-client 0.9.0 prompt-toolkit 3.0.36 protobuf 4.22.1 pscript 0.7.7 psrecord 1.2 psutil 5.8.0 psygnal 0.7.0 ptyprocess 0.7.0 pure-eval 0.2.2 pvlib 0.9.5 py 1.10.0 pyarrow 15.0.1 pyasn1 0.4.8 pyasn1-modules 0.2.8 pybind11 2.6.1 pycairo 1.25.1 pycosat 0.6.4 pycparser 2.21 pycryptodomex 3.16.0 pyct 0.4.8 pydantic 1.9.0 pydicom 2.4.4 pydub 0.25.1 pyee 7.0.4 pyerfa 2.0.0.1 pyglet 2.0.10 Pygments 2.14.0 pymc 5.0.2 PyMeeus 0.5.11 PyNaCl 1.4.0 pynufft 2022.1.1 pyobjc-core 10.1 pyobjc-framework-Cocoa 10.1 PyOpenGL 3.1.6 pyOpenSSL 23.2.0 pyparsing 3.1.1 pyperclip 1.8.2 pypng 0.0.21 pyppeteer 0.2.2 pyproject_hooks 1.0.0 PyQt5 5.15.7 PyQt5-Qt5 5.15.2 PyQt5-sip 12.11.0 pyqtgraph 0.13.1 pyquist 0.8.15 /Users/Atom/Documents/AEL Backup/Aercoustics/code/pyquist/source pyrepl 0.9.0 pyro-api 0.1.2 pyro-ppl 1.8.0 pyrr 0.10.3 pyrsistent 0.17.3 PySocks 1.7.1 pytensor 2.9.1 pytest 8.0.0 pytest-base-url 1.4.2 pytest-cov 2.11.1 pytest-html 3.1.1 pytest-metadata 1.11.0 pytest-variables 1.9.0 python-constraint 1.4.0 python-dateutil 2.8.2 python-json-logger 2.0.7 python-jsonrpc-server 0.4.0 python-language-server 0.36.2 python-minifier 2.5.0 pytomlpp 1.0.10 pytz 2021.1 pyusb 1.2.1 pyvo 1.1 PyWavelets 1.3.0 PyYAML 6.0.1 pyzmq 24.0.1 qiskit 0.31.0 qiskit-aer 0.9.1 qiskit-aqua 0.9.5 qiskit-ibmq-provider 0.17.0 qiskit-ignis 0.6.0 qiskit-terra 0.18.3 qtconsole 5.0.2 QtPy 2.3.0 Quandl 3.6.1 qutip 4.6.2 rdflib 6.1.1 referencing 0.32.1 report-manager 0.4.0 /Users/Atom/Documents/AEL Backup/Aercoustics/code/report-manager/source requests 2.31.0 requests-ntlm 1.1.0 requests-oauthlib 1.3.1 retry 0.9.2 retrying 1.3.3 retworkx 0.10.2 rfc3339-validator 0.1.4 rfc3986-validator 0.1.1 rich 13.3.1 rise 5.7.1 rpds-py 0.17.1 rpy2 3.5.10 rsa 4.5 ruamel.yaml 0.17.32 ruamel.yaml.clib 0.2.2 s3transfer 0.8.2 scikit-image 0.19.3 scikit-learn 1.2.1 scipy 1.12.0 screeninfo 0.8.1 seaborn 0.11.1 selenium 4.17.2 self-attention-cv 1.2.3 semantic-version 2.6.0 Send2Trash 1.8.2 setuptools 68.2.2 sfepy 2022.1 sgp4 2.19 sigpy 0.1.23 SimpleITK 2.1.1 six 1.16.0 skia-pathops 0.7.4 sklearn 0.0 skyfield 1.39 snakeviz 2.1.0 sniffio 1.3.0 snowballstemmer 2.1.0 sortedcontainers 2.4.0 sounddevice 0.4.5 soupsieve 2.2.1 spectrum 0.8.1 speedtest-cli 2.1.3 Sphinx 4.5.0 sphinx-codeautolink 0.3.0 sphinx-rtd-theme 0.5.1 sphinxcontrib-applehelp 1.0.2 sphinxcontrib-devhelp 1.0.2 sphinxcontrib-htmlhelp 2.0.0 sphinxcontrib-jsmath 1.0.1 sphinxcontrib-qthelp 1.0.3 sphinxcontrib-serializinghtml 1.1.5 SQLAlchemy 1.4.31 squarify 0.4.3 srt 3.5.3 stack-data 0.1.4 statsmodels 0.12.2 stevedore 3.5.0 strsimpy 0.2.0 superqt 0.3.1 svgelements 1.9.6 sycomore 1.3.2 symengine 0.8.1 sympy 1.12 tables 3.7.0 tangled-up-in-unicode 0.0.7 tblib 1.7.0 tenacity 6.3.1 tensorboard 2.8.0 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorboardX 2.5 tensorflow 2.8.0 tensorflow-io-gcs-filesystem 0.24.0 termcolor 1.1.0 terminado 0.9.2 testpath 0.4.4 tf-estimator-nightly 2.8.0.dev2021122109 Theano 1.0.5 threadpoolctl 2.1.0 tifffile 2021.11.2 tinycss2 1.2.1 toml 0.10.2 tomli 2.0.0 tonality 0.6.9 /Users/Atom/Documents/AEL Backup/Aercoustics/code/tonality/source toolz 0.11.1 torch 1.11.0 torch-cluster 1.5.9 torch-geometric 2.0.3 torch-scatter 2.0.9 torch-sparse 0.6.12 torch-spline-conv 1.2.1 torchaudio 0.11.0 torchvision 0.12.0 tornado 6.2 tqdm 4.64.0 traitlets 5.8.0 trio 0.24.0 trio-websocket 0.11.1 turbine-parser 1.0.1 /Users/Atom/Documents/AEL Backup/Aercoustics/code/turbine-parser/source tweedledum 1.1.1 typer 0.4.1 types-python-dateutil 2.8.19.20240106 typing_extensions 4.9.0 tzdata 2023.3 tzlocal 2.1 ujson 4.0.2 uncertainties 3.1.7 unicode 2.9 unicodedata2 15.1.0 uri-template 1.3.0 uritemplate 4.1.1 urllib3 1.26.5 utm 0.7.0 visions 0.6.0 vispy 0.11.0 vtk 9.1.0 watchdog 3.0.0 wcwidth 0.2.5 webcolors 1.13 webencodings 0.5.1 websocket-client 1.2.1 websockets 8.1 Werkzeug 2.0.3 wheel 0.41.2 widgetsnbextension 4.0.5 wmctrl 0.3 wrapt 1.13.3 wslink 1.6.6 wsproto 1.2.0 xarray 2023.2.0 xarray-einstats 0.5.1 xdot 1.2 xlrd 2.0.1 XlsxWriter 1.3.8 xmltodict 0.12.0 xyzservices 2022.9.0 yacs 0.1.8 yarl 1.8.1 yfinance 0.1.64 youtube-dl 2021.12.17 yt-dlp 2023.2.17 zict 2.0.0 zipp 3.17.0 zstandard 0.21.0 ```FFMPEG
Output of `ffmpeg -version`: ``` ffmpeg version 6.1 Copyright (c) 2000-2023 the FFmpeg developers built with Apple clang version 15.0.0 (clang-1500.1.0.2.5) configuration: --prefix=/usr/local/Cellar/ffmpeg/6.1-with-options_3 --enable-shared --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-audiotoolbox --enable-videotoolbox --disable-htmlpages --enable-libtesseract --enable-libxvid --enable-libzimg libavutil 58. 29.100 / 58. 29.100 libavcodec 60. 31.102 / 60. 31.102 libavformat 60. 16.100 / 60. 16.100 libavdevice 60. 3.100 / 60. 3.100 libavfilter 9. 12.100 / 9. 12.100 libswscale 7. 5.100 / 7. 5.100 libswresample 4. 12.100 / 4. 12.100 libpostproc 57. 3.100 / 57. 3.100 ```Additional comments
Even in 2D the put_start_and_end_on() method seems to use the line/vector (and ignores the triangle/cone) for the end point, whereas when initializing the Arrow class the end point does represent the tip of the triangle/cone.