3499 Commits

Author SHA1 Message Date
Grant Sanderson
e5298385ed Video work (#2402)
* Bug fix for TransformMatchingStrings with incompatible lengths

* Change faded line in NumberPlane initialization to be more explicit, and lower opacity

* Add option hide_zero_components_on_complex to DecimalNumber

* Validate syntax before reloading

* Add remembered stroke_config to TracedPath

* Add CLAUDE.md to gitignore

* Move pre-calculated traced points to TracingTail

* Fix interplay between time_span and alpha in Animation

* Clearer init for points in TracingTail

* Fix CoordinateSystem.get_area_under_graph

* Allow ComplexPlane.n2p to take in array of complex numbers

* Add put_start_on and put_end_on

* Add Slider

* Add \minus option for Tex to give shorter negative sign

* Put interp_by_hsl option in various color interpretation functions

* Swap priority of matched_keys vs key_map is TransformMatchingStrings

* Have z-index apply recursively

* Set self.svg_string property for SVGMobject

* Fix num_decimal_places config in Tex.make_number_changeable

* Add Surface. color_by_uv_function

* Add VMobject. set_color_by_proportion

* Add \mathcal to tex_to_symbol_count
2025-10-14 07:15:39 -07:00
Grant Sanderson
41613db7ec Remove stray prints 2025-06-14 10:47:52 -05:00
Grant Sanderson
c48c4b6a9f Merge branch 'master' of github.com:3b1b/manim 2025-06-10 10:59:56 -05:00
Grant Sanderson
cc5fbe17b9 Fix bug with mirroring file prefixes 2025-06-10 10:59:47 -05:00
Eivar Morales
98faf7ed55 added information for M1 Users (#2044)
* added information for M1 Users

* Update README.md

Co-authored-by: Paweł Cisło <pyxelr@gmail.com>

---------

Co-authored-by: Paweł Cisło <pyxelr@gmail.com>
2025-06-10 08:42:40 -07:00
Grant Sanderson
d330e1db7f Added documentation from @AkashKarnatak to geometry.py
Based on https://github.com/3b1b/manim/pull/1024
2025-06-10 10:41:09 -05:00
ScarWann
e81dfab0e6 Fixed minor typos in example_scenes.py (#2351) 2025-06-10 08:16:31 -07:00
Abdallah Soliman
fd2a6a69e5 Created a method `remove_all_except()` in scene.py and interactive_scene.py, and made default colors easily configurable. (#2346)
* created a method remove_all_except() in scene.py and interactive_scene.py

* Made it such that default mobject colors can be set through the yaml config file.

* * Default color initialisation wasn't working.
Changed conditional expression to `or` instead.

* Added default values to yaml file.

* added set_background_color() function to Scene class

* Changed default font back to Consolas
2025-06-10 08:15:55 -07:00
Irvanal Haq
6fb1845f4a Enhance Autocompletion for mobject.animate. to Display Mobject Methods (#2342)
* Improve autocompletion for mobject.animate to show Mobject methods

- Added type hint `-> _AnimationBuilder | Self` to `Mobject.animate`, enabling autocompletion for `Mobject` methods after `mobject.animate`.

- Prioritized `typing_extensions.Self` over `typing.Self` in imports, so autocompletion of `Mobject` methods also works in Python < 3.11.

* Support `mobject.animate.` autocompletion in IPython

* Add docstring to `__dir__` and add return type hint

* improve docsting `__dir__` _AnimationBuilder
2025-06-10 08:13:29 -07:00
feng lui
7787730743 Fix No matching distribution found for audioop-lts (python < 3.13) (#2283) (#2341) 2025-06-10 08:12:31 -07:00
Irvanal Haq
a5a73cb2da Fix typos in GLSL comments and add constants PURE_RED, PURE_GREEN, PURE_BLUE (#2340)
* Fix typos in GLSL comments

* Fix typos in GLSL comments

* add constants PURE_RED, PURE_GREEN, PURE_BLUE
2025-06-10 08:12:11 -07:00
Refael Ackermann
bd8d2fbc99 Update URL to pango in README.md (#2334)
https://pango.gnome.org gets `ERR_NAME_NOT_RESOLVED`
2025-06-10 08:11:36 -07:00
Irvanal Haq
53bc83d94a Refactor: move type validation to top of Animation.__init__ and extract into method (#2332) 2025-06-10 08:11:16 -07:00
Varniex
8b9ae95703 Resolving minor bug in StreamLines (#2330)
* resolving minor bug in StreamLines

* minute changes
2025-06-10 08:05:07 -07:00
Irvanal Haq
c667136060 Fix error when using VFadeIn (and its subclasses) (#2328)
* Fix error when using VFadeIn and its subclasses

* add np.floating in type checking of Mobject.set_rgba_array_by_color and VMobject.set_stroke and removing the change in VFadeIn
2025-06-10 08:04:13 -07:00
Calvin Witt
66e8b04507 update readme instructions to add manimgl to path first (#2327)
* update readme instructions to add manimgl to path first

* change
2025-06-10 08:02:58 -07:00
Grant Sanderson
c7ef8404b7 Video work (#2356)
* Only use -no-pdf for xelatex rendering

* Instead of tracking du and dv points on surface, track points off the surface in the normal direction

This means that surface shading will not necessarily work well for arbitrary transformations of the surface. But the existing solution was flimsy anyway, and caused annoying issues with singularity points.

* Have density of anchor points on arcs depend on arc length

* Allow for specifying true normals and orientation of Sphere

* Change miter threshold on stroke shader

* Add get_start_and_end to DashedLine

* Add min_total_width option to DecimalNumber

* Have BackgroundRectangle.set_style absorb (and ignore) added configuration

Note, this feels suboptimal

* Add LineBrace

* Update font_size adjustment in Tex

* Add scale_factor parameter to BulletedList.fade_all_but

* Minor import tweaks

* Add play_sound

* Small if -> elif update

* Always use Group for FadeTransform

* Use time_spanned_alpha in ChangingDecimal

* Change priority of number_config vs. self.decimal_number_config in NumberLine init

* Fix clock animation

* Allow sample_coords to be passed into VectorField
2025-06-10 08:02:32 -07:00
Grant Sanderson
f4737828f6 Video work (#2326)
* Only use -no-pdf for xelatex rendering

* Instead of tracking du and dv points on surface, track points off the surface in the normal direction

This means that surface shading will not necessarily work well for arbitrary transformations of the surface. But the existing solution was flimsy anyway, and caused annoying issues with singularity points.

* Have density of anchor points on arcs depend on arc length

* Allow for specifying true normals and orientation of Sphere

* Change miter threshold on stroke shader

* Add get_start_and_end to DashedLine

* Add min_total_width option to DecimalNumber

* Have BackgroundRectangle.set_style absorb (and ignore) added configuration

Note, this feels suboptimal

* Add LineBrace

* Update font_size adjustment in Tex

* Add scale_factor parameter to BulletedList.fade_all_but

* Minor import tweaks

* Add play_sound
2025-03-20 12:00:35 -07:00
jkjkil4
be7d93cf40 Fix path arc handling for SVGMobject when a matrix transform is present in the SVG (#2322) 2025-03-20 11:59:06 -07:00
Varniex
dbfe7ac75d Performance improved in set_color_by_rgba_func (#2316)
* removing 1 in neg axis if unit_tex is specified

* performance improved in `set_color_by_rgba_func`

* resolving imag axis number mob in ComplexPlane
2025-03-20 11:56:29 -07:00
AStarySky
7a61a13691 Fix issues in number_line.py (#2310)
Fix the issue that changes in decimal_number_config["font_size"] get rewritten by number_config
2025-03-20 11:54:59 -07:00
Йордан Миладинов
3e307926fd Add missing dependencies to setup.cfg and requirements.txt (#2304) 2025-03-20 11:52:48 -07:00
Shinapri De Lucania
2ddec95ce5 Fix --fps type conversion to int (#2299) 2025-03-20 11:52:17 -07:00
Grant Sanderson
db421e3981 Video work (#2318)
* Only use -no-pdf for xelatex rendering

* Instead of tracking du and dv points on surface, track points off the surface in the normal direction

This means that surface shading will not necessarily work well for arbitrary transformations of the surface. But the existing solution was flimsy anyway, and caused annoying issues with singularity points.

* Have density of anchor points on arcs depend on arc length

* Allow for specifying true normals and orientation of Sphere

* Change miter threshold on stroke shader

* Add get_start_and_end to DashedLine

* Add min_total_width option to DecimalNumber

* Have BackgroundRectangle.set_style absorb (and ignore) added configuration

Note, this feels suboptimal

* Add LineBrace

* Update font_size adjustment in Tex
2025-02-26 07:52:59 -08:00
Grant Sanderson
7a7bf83f11 Only use -no-pdf for xelatex rendering (#2298) 2025-01-08 08:22:03 -08:00
Varniex
24eefef5bf Automatically identify the class name based on the specified line number. (#2280)
* identify the scene name based on the line number

* resolving a minor bug in string_mobject

* removing bug of string validation

* Update manimlib/default_config.yml

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>

* Update manimlib/extract_scene.py

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>

* update search scene names

---------

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>
2024-12-28 07:18:32 -08:00
Grant Sanderson
96d44bd560 Video work (#2284)
* Comment tweak

* Directly print traceback

Since the shell.showtraceback is giving some issues

* Make InteracrtiveSceneEmbed into a class

This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.

* Move remaining checkpoint_paste logic into scene_embed.py

This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.

* Change null key to be the empty string

* Ensure temporary svg paths for Text are deleted

* Remove unused dict_ops.py functions

* Remove break_into_partial_movies from file_writer configuration

* Rewrite guarantee_existence using Path

* Clean up SceneFileWriter

It had a number of vestigial functions no longer used, and some setup that could be made more organized.

* Remove --save_pngs CLI arg (which did nothing)

* Add --subdivide CLI arg

* Remove add_extension_if_not_present

* Remove get_sorted_integer_files

* Have find_file return Path

* Minor clean up

* Clean up num_tex_symbols

* Fix find_file

* Minor cleanup for extract_scene.py

* Add preview_frame_while_skipping option to scene config

* Use shell.showtraceback function

* Move keybindings to config, instead of in-place constants

* Replace DEGREES -> DEG

* Add arg to clear the cache

* Separate out full_tex_to_svg from tex_to_svg

And only cache to disk the results of full_tex_to_svg.  Otherwise, making edits to the tex_templates would not show up without clearing the cache.

* Bug fix in handling BlankScene

* Make checkpoint_states an instance variable of CheckpointManager

As per https://github.com/3b1b/manim/issues/2272

* Move resizing out of Window.focus, and into Window.init_for_scene

* Make default output directory "." instead of ""

To address https://github.com/3b1b/manim/issues/2261

* Remove input_file_path arg from SceneFileWriter

* Use Dict syntax in place of dict for config more consistently across config.py

* Simplify get_output_directory

* Swap order of preamble and additional preamble

* Minor stylistic tweak

* Have UnitInterval pass on kwargs to NumberLine

* Add simple get_dist function

* Have TracedPath always update to the stroke configuration passed in

* Have Mobject.match_points apply to all parts of data in pointlike_data_key

* Always call Mobject.update upon adding an updater

* Add Surface.uv_to_point

* Make sure Surface.set_opacity takes in a recurse option

* Update num_tex_symbols to account for \{ and \}
2024-12-26 09:35:34 -08:00
Grant Sanderson
39fbb677dc Have autoreload update shell namespace with reloaded module variables (#2278)
* Have autoreload update shell namespace with reloaded module variables

* Update comments
2024-12-13 13:23:50 -08:00
syhner
c13d2a946b fix typos (#2270) 2024-12-13 11:05:48 -08:00
Grant Sanderson
0c69ab6a32 Update version number 2024-12-12 20:54:37 -06:00
Grant Sanderson
f427fc67df A few bug fixes (#2277)
* Comment tweak

* Directly print traceback

Since the shell.showtraceback is giving some issues

* Make InteracrtiveSceneEmbed into a class

This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.

* Move remaining checkpoint_paste logic into scene_embed.py

This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.

* Change null key to be the empty string

* Ensure temporary svg paths for Text are deleted

* Remove unused dict_ops.py functions

* Remove break_into_partial_movies from file_writer configuration

* Rewrite guarantee_existence using Path

* Clean up SceneFileWriter

It had a number of vestigial functions no longer used, and some setup that could be made more organized.

* Remove --save_pngs CLI arg (which did nothing)

* Add --subdivide CLI arg

* Remove add_extension_if_not_present

* Remove get_sorted_integer_files

* Have find_file return Path

* Minor clean up

* Clean up num_tex_symbols

* Fix find_file

* Minor cleanup for extract_scene.py

* Add preview_frame_while_skipping option to scene config

* Use shell.showtraceback function

* Move keybindings to config, instead of in-place constants

* Replace DEGREES -> DEG

* Add arg to clear the cache

* Separate out full_tex_to_svg from tex_to_svg

And only cache to disk the results of full_tex_to_svg.  Otherwise, making edits to the tex_templates would not show up without clearing the cache.

* Bug fix in handling BlankScene

* Make checkpoint_states an instance variable of CheckpointManager

As per https://github.com/3b1b/manim/issues/2272

* Move resizing out of Window.focus, and into Window.init_for_scene

* Make default output directory "." instead of ""

To address https://github.com/3b1b/manim/issues/2261

* Remove input_file_path arg from SceneFileWriter

* Use Dict syntax in place of dict for config more consistently across config.py

* Simplify get_output_directory

* Swap order of preamble and additional preamble
2024-12-12 18:45:34 -08:00
Grant Sanderson
3d9a0cd25e Move resizing out of Window.focus, and into Window.init_for_scene (#2274) 2024-12-12 14:16:45 -08:00
Grant Sanderson
33dbf04985 Make checkpoint_states an instance variable of CheckpointManager (#2273)
As per https://github.com/3b1b/manim/issues/2272
2024-12-12 14:07:55 -08:00
Grant Sanderson
744e695340 Misc. clean up (#2269)
* Comment tweak

* Directly print traceback

Since the shell.showtraceback is giving some issues

* Make InteracrtiveSceneEmbed into a class

This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.

* Move remaining checkpoint_paste logic into scene_embed.py

This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.

* Change null key to be the empty string

* Ensure temporary svg paths for Text are deleted

* Remove unused dict_ops.py functions

* Remove break_into_partial_movies from file_writer configuration

* Rewrite guarantee_existence using Path

* Clean up SceneFileWriter

It had a number of vestigial functions no longer used, and some setup that could be made more organized.

* Remove --save_pngs CLI arg (which did nothing)

* Add --subdivide CLI arg

* Remove add_extension_if_not_present

* Remove get_sorted_integer_files

* Have find_file return Path

* Minor clean up

* Clean up num_tex_symbols

* Fix find_file

* Minor cleanup for extract_scene.py

* Add preview_frame_while_skipping option to scene config

* Use shell.showtraceback function

* Move keybindings to config, instead of in-place constants

* Replace DEGREES -> DEG
2024-12-12 08:39:54 -08:00
Grant Sanderson
00b34f2020 Autoreload v2 (#2268)
* Add autoreload

* Typo correction

* Add --autoreload to configuration docts

Co-Authored-By: Splines <37160523+Splines@users.noreply.github.com>

---------

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>
2024-12-12 06:52:03 -08:00
Grant Sanderson
bafea89ac9 Update InteractiveSceneEmbed (#2267)
* Comment tweak

* Directly print traceback

Since the shell.showtraceback is giving some issues

* Make InteracrtiveSceneEmbed into a class

This way it can keep track of it's internal shell; use of get_ipython has a finicky relationship with reloading.

* Move remaining checkpoint_paste logic into scene_embed.py

This involved making a few context managers for Scene: temp_record, temp_skip, temp_progress_bar, which seem useful in and of themselves.

* Change null key to be the empty string
2024-12-11 11:33:48 -08:00
Grant Sanderson
eeb4fdf270 Merge pull request #2266 from 3b1b/video-work
Refactor config
2024-12-11 10:53:26 -06:00
Grant Sanderson
e2e785d6c9 Remove init_config.py
It may become a bit unwieldy to make sure this matches the structure of default_config, given the amount of code repetition involved. It seems easier for a user to just create their own custom_config.yml file directly.
2024-12-11 10:50:53 -06:00
Grant Sanderson
c6c1a49ede Update setup.cfg 2024-12-11 10:38:30 -06:00
Grant Sanderson
6d753a297a Remove stray imports 2024-12-11 10:38:23 -06:00
Grant Sanderson
f9fc543b07 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-12-11 10:36:52 -06:00
Grant Sanderson
bac0c0c9b9 Merge pull request #2265 from Varniex/master
Minor Import Bug Fixed + Adding Required Packages
2024-12-11 10:35:44 -06:00
Grant Sanderson
9ae5b4dee3 Use addict.Dict for scene config 2024-12-11 10:33:50 -06:00
Grant Sanderson
0b350e248b Change global_attrs back to global_config in Text 2024-12-11 10:18:05 -06:00
Grant Sanderson
7148d6bced Add addict to requirements 2024-12-11 10:03:49 -06:00
Grant Sanderson
b470a47da7 Remove unnecessary import 2024-12-11 10:03:39 -06:00
Grant Sanderson
13fdc9629d No need for the shortcuts into the manim_config 2024-12-11 09:58:51 -06:00
Grant Sanderson
fce92347fa Replace get_global_config() with manim_config, and make it an addict Dict 2024-12-11 09:50:17 -06:00
Grant Sanderson
185f642826 Focus and sync window when initialized for a scene 2024-12-11 09:29:04 -06:00
Grant Sanderson
4a6a125739 Change "style" in default config to "text" 2024-12-11 08:30:31 -06:00
Grant Sanderson
8246d0da5d Fix bug with xelatex rendering 2024-12-11 08:23:17 -06:00
Grant Sanderson
1794e4d0ba Better align docs description of configuration with the updated format 2024-12-11 07:37:52 -06:00
Grant Sanderson
4d7f6093b4 Update how tex configuration default is passed in 2024-12-11 07:18:30 -06:00
Grant Sanderson
37a05094ea Small comment changes 2024-12-11 07:17:20 -06:00
Varniex
76afc42e9a adding required packages to setup.cfg file 2024-12-11 16:46:09 +05:30
Varniex
5fcb668f07 fixing get_ipython import error 2024-12-11 16:40:56 +05:30
Grant Sanderson
2d7b9d579a Move comment 2024-12-10 20:19:30 -06:00
Grant Sanderson
9ac16ab722 Remove DEFAULT_FPS constant
It's a bit silly to have it's valued defined by camera_config, when it's only function is to be a default value for Camera's configuration
2024-12-10 20:19:25 -06:00
Grant Sanderson
8744c878f4 Make log_level configurable in default_config 2024-12-10 20:12:38 -06:00
Grant Sanderson
9fcdd0de5f Use pyglet.window.key for key constant values 2024-12-10 20:00:03 -06:00
Grant Sanderson
9f785a5fba Move key to int constants to interactive_scene.py 2024-12-10 19:42:53 -06:00
Grant Sanderson
a03accff9c Rename local colors variable in constants.py 2024-12-10 19:36:19 -06:00
Grant Sanderson
7d3758c44c Move joint_type_map out of constants to VMobject 2024-12-10 19:33:06 -06:00
Grant Sanderson
f9a44c9975 Make ffmpeg_bin specification a piece of file_writer_config 2024-12-10 19:29:55 -06:00
Grant Sanderson
d5c36de3c5 DEFAULT_MOBJECT_TO_MOBJECT_BUFFER -> DEFAULT_MOBJECT_TO_MOBJECT_BUFF
And likewise DEFAULT_MOBJECT_TO_MOBJECT_BUFFER -> DEFAULT_MOBJECT_TO_MOBJECT_BUFF
2024-12-10 19:23:15 -06:00
Grant Sanderson
c9b6ee57a8 Make default_wait_time a piece of scene configuration 2024-12-10 19:21:16 -06:00
Grant Sanderson
2c43d293a5 Move arbitrary constant definitions into default_config
This should make things like the color palette and frame size more easily customizable.
2024-12-10 19:17:55 -06:00
Grant Sanderson
3d3f8258f4 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-12-10 18:49:44 -06:00
Grant Sanderson
17f37ff02a Merge pull request #2264 from Varniex/master
Fixing a Cairo Bug on Windows OS
2024-12-10 18:49:26 -06:00
Grant Sanderson
2359ed9aa4 Remove tempfile from requirements.txt 2024-12-10 17:00:33 -06:00
Grant Sanderson
32d36a09f6 Update commend on reload_scene 2024-12-10 15:46:34 -06:00
Grant Sanderson
8cf95ec9a4 Move ReloadManager logic into __main__.py
Since the reload logic no longer relies on any state, the relevant loop is simple enough that it feels clearest to include it in the main entry point file.
2024-12-10 15:46:17 -06:00
Grant Sanderson
24697377db Make the fact that the global configuration is a mutable global dictionary a bit more explicit
Instead of implicit through the use of lru_cache
2024-12-10 15:31:43 -06:00
Grant Sanderson
d21fbd02bc Minor tweak to reload_scene 2024-12-10 14:46:03 -06:00
Grant Sanderson
284c1d8f2c Move message for no scenes found to extract_scene 2024-12-10 14:43:10 -06:00
Grant Sanderson
ae93d8fcc6 Move update to is_reload status of run_config out of ReloadManager 2024-12-10 14:42:53 -06:00
Grant Sanderson
1d67768a13 Move reload out of Scene, instead have it directly update the global run configuration 2024-12-10 14:34:46 -06:00
Grant Sanderson
07bb34793e Add simple function descriptions 2024-12-10 14:25:26 -06:00
Grant Sanderson
cd744024ea Minor reorganization of ReloadManager.retrieve_scenes_and_run 2024-12-10 14:20:43 -06:00
Grant Sanderson
667cfaf160 Remove args from ReloadManager 2024-12-10 14:16:29 -06:00
Grant Sanderson
c61e0bcee5 Move window_config out of run_config 2024-12-10 14:16:07 -06:00
Grant Sanderson
d1080aa6fd Add run configuration to global config 2024-12-10 14:08:12 -06:00
Grant Sanderson
f9fa8ac846 Make scene configuration part of the global configuration 2024-12-10 13:58:03 -06:00
Grant Sanderson
bcc4235e2f Move embed configuration out of Scene, and get rid of error sound option 2024-12-10 12:43:29 -06:00
Varniex
c51a84a6ee Fixing a Cairo Bug (Windows OS) 2024-12-11 00:10:06 +05:30
Grant Sanderson
6b38011078 Refactor config.py 2024-12-10 12:34:18 -06:00
Grant Sanderson
858d8c122b Rename "file_writer_config" in default_config to simply "file_writer" 2024-12-10 11:43:48 -06:00
Grant Sanderson
4b483b75ce Minor tweak 2024-12-10 11:39:23 -06:00
Grant Sanderson
4cc2e5ed17 Consolidate camera configuration 2024-12-10 11:39:13 -06:00
Grant Sanderson
d4c5c4736a Move logic for window size and position into Window class 2024-12-10 11:07:54 -06:00
Grant Sanderson
178cca0ca5 Factor out get_window_position 2024-12-10 10:35:31 -06:00
Grant Sanderson
c02259a39e Remove import 2024-12-10 10:35:21 -06:00
Grant Sanderson
1276724891 Pull out the initial Window.to_default_position from init_for_scene 2024-12-10 10:14:59 -06:00
Grant Sanderson
9e77b0dcdd Consolidate window configuration 2024-12-10 10:10:58 -06:00
Grant Sanderson
1a14a6bd0d Merge pull request #2262 from 3b1b/video-work
Refactor scene creation
2024-12-10 09:53:18 -06:00
Grant Sanderson
950ac31b9b Replace IGNORE_MANIMLIB_MODULES constant with a piece of global configuration 2024-12-09 16:57:55 -06:00
Grant Sanderson
8706ba1589 No real need to track ReloadManager.scenes
This was to be able to loop through an tear them down, but tear down is primarily about ending any file writing, and potentially cleaning up a window, which for the sake of reusing a window we don't want to do anyway.
2024-12-09 16:46:13 -06:00
Grant Sanderson
dd508b8cfc No need to track ReloadManager.start_at_line 2024-12-09 16:43:08 -06:00
Grant Sanderson
88bae476ce Don't print filename that is being reloaded 2024-12-09 16:25:18 -06:00
Grant Sanderson
7a69807ce6 Remove mobject.save_to_file
This simply didn't work, and had no resilience to changes to the library. For cases where this might be useful, it's likely much better deliberately save specific data which is time-consuming to generate on the fly.
2024-12-09 16:24:50 -06:00
Grant Sanderson
6d0b23f914 Slightly simplify ReloadManager 2024-12-09 16:14:27 -06:00
Grant Sanderson
bf81d94362 Don't make reload_manager a global variable 2024-12-09 15:54:16 -06:00
Grant Sanderson
5b315d5c70 Get rid of the (hacky) solution to redefining Scene methods, since reload handles it better 2024-12-09 14:02:22 -06:00
Grant Sanderson
cb3e115a6c Minor cleaning 2024-12-09 14:01:34 -06:00
Grant Sanderson
40b5c7c1c1 Slightly clean up interactive_scene_embed 2024-12-09 13:56:33 -06:00
Grant Sanderson
636fb3a45b Factor interactive embed logic out of Scene class 2024-12-09 13:53:03 -06:00
Grant Sanderson
ea3f77e3f1 Add blank line 2024-12-09 11:59:22 -06:00
Grant Sanderson
0692afdfec Bug fix 2024-12-09 11:59:16 -06:00
Grant Sanderson
14c6fdc1d9 Slight refactor of get_indent 2024-12-09 09:49:48 -06:00
Grant Sanderson
89bf0b1297 Track all mobjects as a set in Scene. begin_animations 2024-12-07 08:21:33 -07:00
Grant Sanderson
2e8a282cc7 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-12-07 08:15:11 -07:00
Grant Sanderson
5fa99b7723 Set default log level to "WARNING" 2024-12-07 08:14:56 -07:00
Benjamín Ubilla
df1e067480 Fix 3D overlap when animating by checking Mobject family members recursively instead of self.mobjects (#2254)
* Add Animation.setup_scene method to make Animation more customizable

* Remove Animation.setup_scene method and let scene check all mobject family members
2024-12-07 07:13:35 -08:00
Grant Sanderson
0ef12ad7e4 Move FRAME_HEIGHT back to constants
Where it belongs
2024-12-06 12:35:39 -07:00
Grant Sanderson
09c27a654f Minor cleaning of imports 2024-12-06 12:26:54 -07:00
Grant Sanderson
90dfb02cc6 Move get_scene_module logic to extract_scene.py 2024-12-06 12:24:16 -07:00
Grant Sanderson
e270f5c3d3 Change from get_module_with_inserted_embed_line to insert_embed_line_to_module
Rather than taking in a file_name and reading it in, directly take the module and edit its code.
2024-12-06 11:59:18 -07:00
Grant Sanderson
fadd045fc1 Don't write new file when inserting embed line
Instead, load the relevant module of the true file, and execute the modified code within that.

This also cleans up some of the previous now-unnecessary code around get_module_with_inserted_embed_line
2024-12-06 11:05:57 -07:00
Grant Sanderson
dd0aa14442 Clean up get_module_with_inserted_embed_line, only accept line number as embed arg 2024-12-06 10:39:02 -06:00
Grant Sanderson
d357e21c1d Change how ModuleLoader receives is_reload information
Use on the fly import of reload_manager rather than altering the args
2024-12-06 10:07:07 -06:00
Grant Sanderson
dd251ab8c2 Remove "preview" as a scene parameter, just look for whether window is None 2024-12-06 09:54:14 -06:00
Grant Sanderson
2e49c60148 Use config.get_resolution for constants 2024-12-06 09:49:21 -06:00
Grant Sanderson
33c7f6d063 Factor out resolution from get_camera_config 2024-12-06 09:46:26 -06:00
Grant Sanderson
53b6c34ebe Create Window outside of Scene, and pass it in as an argument 2024-12-06 09:39:12 -06:00
Grant Sanderson
49c2b5cfe0 Check if animation.mobject is in the full family of scene mobjects before adding 2024-12-06 08:51:08 -06:00
Grant Sanderson
09fb8d324e Merge branch 'master' of github.com:3b1b/manim into video-work 2024-12-05 18:18:28 -06:00
Splines
6196daa5ec Reload user-defined modules during reload() (#2257)
* Experiment a lot with module loading

* Extract methods out of experimental mess

* Fix get module return type

* Only reload() modules during reload() command

* Remove unnecessary default parameter

* Add docstrings and logging statements

* Delete unwanted printout

* Improve logging messages

* Extract methods to a new class ModuleLoader

* Remove unused builtins import

* exec_module in any case at the end

* Clarify docstrings & move get_module method up in file

* Add more additionally excluded modules as array

* Distinguish between user-defined modules and external libraries like numpy

* Improved tracked_import docstring

* Remove _insert_embed suffix before logging

* Fix args.is_reload not defined error

* Refine logic to determine whether module is user-defined or not

* Fix list vs. set type annotations

* Improve docstrings & change order of early return

* Fix spelling mistake of "Reloading"

* Try out custom deep reload

* Make deep reload more robust

* Also reload modules imported as classes

* Move early return up to greatly improve performance

* Clean up comments

* Make methods of Module Loader "private"

* Add backticks around function in docstring

---------

Co-authored-by: Grant Sanderson <grant@3blue1brown.com>
2024-12-05 16:18:10 -08:00
Grant Sanderson
e05cae6775 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-12-05 16:51:35 -06:00
Grant Sanderson
94f6f0aa96 Cleaner local caching of Tex/Text data, and partially cleaned up configuration (#2259)
* Remove print("Reloading...")

* Change where exception mode is set, to be quieter

* Add default fallback monitor for when no monitors are detected

* Have StringMobject work with svg strings rather than necessarily writing to file

Change SVGMobject to allow taking in a string of svg code as an input

* Add caching functionality, and have Tex and Text both use it for saved svg strings

* Clean up tex_file_writing

* Get rid of get_tex_dir and get_text_dir

* Allow for a configurable cache location

* Make caching on disk a decorator, and update implementations for Tex and Text mobjects

* Remove stray prints

* Clean up how configuration is handled

In principle, all we need here is that manim looks to the default_config.yaml file, and updates it based on any local configuration files, whether in the current working directory or as specified by a CLI argument.

* Make the default size for hash_string an option

* Remove utils/customization.py

* Remove stray prints

* Consolidate camera configuration

This is still not optimal, but at least makes clearer the way that importing from constants.py kicks off some of the configuration code.

* Factor out configuration to be passed into a scene vs. that used to run a scene

* Use newer extract_scene.main interface

* Add clarifying message to note what exactly is being reloaded

* Minor clean up

* Minor clean up

* If it's worth caching to disk, then might as well do so in memory too during development

* No longer any need for custom hash_seeds in Tex and Text

* Remove display_during_execution

* Get rid of (no longer used) mobject_data directory reference

* Remove get_downloads_dir reference from register_font

* Update where downloads go

* Easier use of subdirectories in configuration

* Add new pip requirements
2024-12-05 14:51:14 -08:00
Grant Sanderson
0e83c9c0d9 Merge branch 'master' into video-work 2024-12-05 16:50:13 -06:00
Iñaki Rabanillo
5a70d67b98 Update coordinate_systems.py (#2258) 2024-12-05 14:49:16 -08:00
henri-gasc
66862db9b2 Drop pyrr (#2256) 2024-12-05 14:43:14 -08:00
Varniex
5d3f730824 Cleaning up some imports + Minor Bug fixed in VectorField (#2253)
* cleaning up imports

* sample_points -> sample_coords
2024-12-05 14:42:46 -08:00
Grant Sanderson
3cd3e8cedc Add new pip requirements 2024-12-05 15:56:29 -06:00
Grant Sanderson
08acfa6f1f Easier use of subdirectories in configuration 2024-12-05 15:52:39 -06:00
Grant Sanderson
75527563de Update where downloads go 2024-12-05 15:27:57 -06:00
Grant Sanderson
c96734ace0 Remove get_downloads_dir reference from register_font 2024-12-05 15:14:37 -06:00
Grant Sanderson
71e440be93 Get rid of (no longer used) mobject_data directory reference 2024-12-05 15:08:25 -06:00
Grant Sanderson
8098149006 Remove display_during_execution 2024-12-05 15:05:37 -06:00
Grant Sanderson
4251ff436a No longer any need for custom hash_seeds in Tex and Text 2024-12-05 15:05:26 -06:00
Grant Sanderson
85f8456228 If it's worth caching to disk, then might as well do so in memory too during development 2024-12-05 14:56:35 -06:00
Grant Sanderson
e0031c63bc Minor clean up 2024-12-05 14:55:28 -06:00
Grant Sanderson
361d9d0652 Minor clean up 2024-12-05 14:42:22 -06:00
Grant Sanderson
1d14bae092 Add clarifying message to note what exactly is being reloaded 2024-12-05 14:37:14 -06:00
Grant Sanderson
8dfd4c1c4e Use newer extract_scene.main interface 2024-12-05 14:36:43 -06:00
Grant Sanderson
96a4a4b76f Factor out configuration to be passed into a scene vs. that used to run a scene 2024-12-05 14:36:21 -06:00
Grant Sanderson
0496402c55 Consolidate camera configuration
This is still not optimal, but at least makes clearer the way that importing from constants.py kicks off some of the configuration code.
2024-12-05 14:17:53 -06:00
Grant Sanderson
fc32f162a0 Remove stray prints 2024-12-05 13:46:47 -06:00
Grant Sanderson
3b9ef57b22 Remove utils/customization.py 2024-12-05 11:59:01 -06:00
Grant Sanderson
b593cde317 Make the default size for hash_string an option 2024-12-05 11:53:55 -06:00
Grant Sanderson
34ad61d013 Clean up how configuration is handled
In principle, all we need here is that manim looks to the default_config.yaml file, and updates it based on any local configuration files, whether in the current working directory or as specified by a CLI argument.
2024-12-05 11:53:18 -06:00
Grant Sanderson
cfb7d2fa47 Remove stray prints 2024-12-05 10:09:48 -06:00
Grant Sanderson
43821ab2ba Make caching on disk a decorator, and update implementations for Tex and Text mobjects 2024-12-05 10:09:15 -06:00
Grant Sanderson
89ddfadf6b Allow for a configurable cache location 2024-12-04 20:50:42 -06:00
Grant Sanderson
0c385e820f Get rid of get_tex_dir and get_text_dir 2024-12-04 20:33:43 -06:00
Grant Sanderson
ac01b144e8 Clean up tex_file_writing 2024-12-04 20:30:53 -06:00
Grant Sanderson
129e512b0c Add caching functionality, and have Tex and Text both use it for saved svg strings 2024-12-04 19:51:01 -06:00
Grant Sanderson
88370d4d5d Have StringMobject work with svg strings rather than necessarily writing to file
Change SVGMobject to allow taking in a string of svg code as an input
2024-12-04 19:11:21 -06:00
Grant Sanderson
671a31b298 Add default fallback monitor for when no monitors are detected 2024-12-03 15:14:48 -06:00
Grant Sanderson
f8280a12be Change where exception mode is set, to be quieter 2024-11-30 10:08:54 -06:00
Grant Sanderson
d78fe93743 Remove print("Reloading...") 2024-11-30 10:08:41 -06:00
Anon
8239f1bf35 Update README.md for better readability (#2246) 2024-11-26 10:11:04 -08:00
Splines
1fa17030a2 Add reload() command for interactive scene reloading (#2240)
* Init reload command (lots of things not working yet)

* Add back in class line (accidentally deleted)

* Add back in key modifiers (accidentally deleted)

* Unpack tuple from changed `get_module`

* Init MainRunManager & respawn IPython shell

* Init cleanup of scenes from manager

* Restore string quotes

* Still take `self.preview` into account

* Remove left-over code from module experimentation

* Remove double window activation

* Reset scenes array in RunManager

* Move self.args None check up

* Use first available window

* Don't use constructor for RunManager

* Use self. syntax

* Init moderngl context manually

* Add some comments for failed attempts to reset scene

* Reuse existing shell (this fixed the bug 🎉)

* Remove unused code

* Remove unnecessary intermediate ReloadSceneException

* Allow users to finally exit

* Rename main_run_manager to reload_manager

* Add docstrings to `ReloadManager`

* Improve reset management in window

* Clarify why we use magic exit_raise command

* Add comment about window reuse

* Improve docstrings in ReloadManager & handle case of 0 scenes

* Set scene and title earlier

* Run linter suggestions
2024-11-26 10:09:43 -08:00
Grant Sanderson
530cb4f104 Merge pull request #2250 from 3b1b/video-work
Video work
2024-11-25 13:44:08 -06:00
Grant Sanderson
85638d88dc Update parameter range for sphere 2024-11-25 12:39:41 -07:00
Grant Sanderson
fbce0b132c Temporary band-aide for degenerate normal vector calculations
This solution is a bit too specific to the case of spheres.
2024-11-25 12:39:32 -07:00
Grant Sanderson
dd51b696e5 Only apply non-flat-stroke correction in non-zero joint angle vertices 2024-11-25 12:35:32 -07:00
Grant Sanderson
9cd6a87ff8 Make sure VMobject uniform flat_stroke matches the use inside the quadratic_bezier/stroke/geom.glsl code 2024-11-25 12:28:31 -07:00
Grant Sanderson
54c8a9014b Add scale_stroke_with_zoom option to VMobject 2024-11-25 11:27:11 -07:00
Grant Sanderson
e19ceaaff0 Have TexMobject keep track of font_size 2024-11-25 11:02:54 -07:00
Grant Sanderson
5b88d2347c Allow for LaTeX in DecimalNumber, e.g. for units 2024-11-25 11:01:38 -07:00
Grant Sanderson
c6b9826f84 Update TimeVaryingVectorField to match new VectorField configuration 2024-11-25 10:50:12 -07:00
Grant Sanderson
90ab2f64bb Clean up style arguments on VectorField 2024-11-25 10:49:29 -07:00
Grant Sanderson
ed2f9f3305 Fix import of pyplot 2024-11-25 10:49:05 -07:00
Grant Sanderson
1d0deb8a33 Remove OldVectorfield 2024-11-25 10:14:23 -07:00
Grant Sanderson
753a042dbe Remove unused method 2024-11-25 10:13:44 -07:00
Grant Sanderson
55b12c902c Use density as a parameter instead of step_multiple 2024-11-25 10:13:37 -07:00
Grant Sanderson
e80b9d0e47 Less collision-prone file names for downloads 2024-11-25 09:31:15 -07:00
Grant Sanderson
1248abd922 Merge pull request #2233 from mitkonikov/modifier-keys-fix
Properly check modifier keys.
2024-11-25 10:09:10 -06:00
Grant Sanderson
314ca89a45 Merge pull request #2241 from Splines/feature/focus
Add `focus()` command
2024-11-25 10:06:48 -06:00
Grant Sanderson
0ad5a0e76e Further development on VectorField 2024-11-15 09:07:46 -08:00
Grant Sanderson
64ae1364ca Update the Vector Field interface 2024-11-12 11:21:19 -08:00
Splines
af923a2327 Add docstring to user-facing focus() method 2024-11-10 19:10:53 +01:00
Splines
97b6e39abb Init new focus() command 2024-11-10 18:48:33 +01:00
Grant Sanderson
b84376d6fd Add Cone 2024-11-08 14:28:17 -06:00
Grant Sanderson
9475fcd19e Have clip plane recurse through family 2024-11-08 14:27:20 -06:00
Grant Sanderson
003c4d8626 Merge pull request #2231 from MathItYT/master
Fix bad 3D overlapping
2024-10-27 13:07:35 -05:00
MathItYT
693a859caf revert changes in mobject.py and camera.py 2024-10-27 14:10:12 -03:00
MathItYT
52948f846e Merge branch 'master' of https://github.com/MathItYT/manimgl 2024-10-27 14:07:03 -03:00
MathItYT
1738876f43 fix bad 3D overlapping using z_index 2024-10-27 14:06:35 -03:00
Mitko Nikov
dc731f8bf2 Properly check modifier keys. 2024-10-25 00:01:30 +02:00
MathItYT
e5cf0558d8 fix 3D bad overlapping 2024-10-23 20:31:52 -03:00
Grant Sanderson
1139b545f9 Merge pull request #2214 from 3b1b/update-pango-requirement
Update ManimPango requirement
2024-10-23 17:59:08 -05:00
Grant Sanderson
0b65e4c7b6 Merge pull request #2220 from Varniex/master
Minor Bug fixed: window's bg color now changing.
2024-10-23 17:58:52 -05:00
Grant Sanderson
371fca147b Update version in setup.cfg 2024-10-23 17:54:18 -05:00
Grant Sanderson
e1816c2ac5 Merge pull request #2230 from 3b1b/video-work
Misc. bug fixes
2024-10-23 17:44:08 -05:00
Grant Sanderson
199395b6e3 Fix negative winding issue
https://github.com/3b1b/manim/issues/2146
2024-10-23 17:40:31 -05:00
Grant Sanderson
837bb14c03 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-10-23 11:41:29 -05:00
Grant Sanderson
eca370f5ce Merge pull request #2229 from 3b1b:add-dependency
Add mapbox-earcut dependency
2024-10-23 11:41:06 -05:00
Grant Sanderson
5505fc1d54 Add mapbox-earcut dependency 2024-10-23 11:40:14 -05:00
Varniex
04295ec177 Minor Bug fixed: window's bg color now changing. 2024-10-20 16:53:47 +05:30
Grant Sanderson
0c7c9dee93 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-10-17 12:43:57 -05:00
Grant Sanderson
1a65498f97 Merge pull request #2218 from 3b1b/3b1b-patch-1
Update setup.cfg
2024-10-17 12:43:28 -05:00
Grant Sanderson
a34c4482f6 Update setup.cfg 2024-10-17 10:43:18 -07:00
Grant Sanderson
e3e87f6110 Update Pango requirement 2024-10-17 12:32:11 -05:00
Grant Sanderson
aaa28a2712 Discard transparent parts of textured surfaces 2024-10-17 12:31:53 -05:00
Grant Sanderson
aa18373eb7 Update ManimPango requirement 2024-10-15 09:51:55 -07:00
Grant Sanderson
d499544366 Merge pull request #2180 from fofoni/fix-ipython-scope
Fix `NameError` when a pasted function attempts to access a variable in its outer scope
2024-10-13 20:57:19 -05:00
Pedro Fonini
2dd0256af6 Instantiate the IPython shell without a local ns 2024-10-12 22:02:43 -03:00
Grant Sanderson
d4080b8978 Merge pull request #2179 from 3b1b/3b1b-patch-1
Reference workflow documentation
2024-10-12 15:42:35 -07:00
Grant Sanderson
23c9e67fa4 Reference workflow documentation 2024-10-12 15:42:25 -07:00
Grant Sanderson
cce4ffbb60 Merge pull request #2177 from 3b1b/video-work
Fix issue with Difference
2024-10-10 13:20:53 -07:00
Grant Sanderson
99493fc4f7 Fix issue with Difference
https://github.com/3b1b/manim/issues/2174
2024-10-10 15:13:33 -05:00
Grant Sanderson
81b17dd63e Merge pull request #2168 from zhujisheng/patch-1
Update scene.py to make scene.time more accurate
2024-10-10 12:24:05 -07:00
Grant Sanderson
15e5d8a07a Merge pull request #2176 from 3b1b/video-work
Video work
2024-10-10 12:23:19 -07:00
Grant Sanderson
154a473a12 Get rid of globals update locals hack
It seems this issues is no longer there in the case of list constructors(?). Although it still exists for functions defined within a cell, that can be circumvented with more explicit function arguments.
2024-10-10 14:05:43 -05:00
Grant Sanderson
29cb6f76fe Write scene insertions into a subdirectory 2024-10-02 07:24:33 -05:00
Grant Sanderson
09e9e65ba4 Merge branch 'master' of github.com:3b1b/manim into video-work 2024-10-01 13:29:42 -05:00
Grant Sanderson
f69b189f2c Merge pull request #2171 from 3b1b/fix-vert-index-issue
Remove use of gl_VertexID
2024-10-01 11:27:57 -07:00
Grant Sanderson
641c03a95b Change condition for updating VMobject. outer_vert_indices 2024-10-01 13:27:02 -05:00
Grant Sanderson
f737823bac Add VMobject. get_shader_vert_indices 2024-10-01 13:20:23 -05:00
Grant Sanderson
95bb67c47f Change return type for Mobject.get_shader_data 2024-10-01 13:18:40 -05:00
Grant Sanderson
512fb89726 Save VMobject. outer_vert_indices 2024-10-01 13:14:24 -05:00
Grant Sanderson
cf37f34e1f Add copy cursor position option 2024-10-01 13:05:00 -05:00
Grant Sanderson
bddd9c35ea Tiny formatting 2024-10-01 13:04:50 -05:00
Grant Sanderson
f0bf50eb7f Remove use of gl_VertexID 2024-09-28 09:54:28 -05:00
Grant Sanderson
fea7096cbe Change default animation behavior to suspend_mobject_updating=False 2024-09-28 09:48:20 -05:00
zhujisheng
ccb9977a67 Update scene.py to make scene.time more accurate
When the time intervals are (0, dt, 2dt, ...), during the first frame processing, only the video is inserted, but the update parameter is 0, which causes scene.time to be inaccurate. The correct time intervals should be (dt, 2dt, ...)
2024-09-23 23:48:18 +08:00
Grant Sanderson
1f8ad5be16 Fix pfp for null curves 2024-09-21 12:17:10 -04:00
Grant Sanderson
217eb6b486 Move new VectorField from optics projects into main repo 2024-09-21 12:16:09 -04:00
Grant Sanderson
0804109301 Flatten uniform arrays 2024-09-21 12:15:37 -04:00
Grant Sanderson
62a4ea5165 Update description of remove_list_redundancies 2024-09-21 12:15:29 -04:00
Grant Sanderson
3e7244b90b Fix bad argument 2024-09-21 12:15:06 -04:00
Grant Sanderson
95fca885c9 Push clip plane functionality up to all Mobjects 2024-09-17 17:20:19 -05:00
Grant Sanderson
8eac976c8d Tweak moderngl import in ImageMobject 2024-09-06 13:35:32 -05:00
Grant Sanderson
9eda000a97 Merge pull request #1816 from TurkeyBilly/patch-8
fix label squeezed bug
2024-09-06 11:03:38 -07:00
Grant Sanderson
bcf610d1ad Merge branch 'master' into patch-8 2024-09-06 11:03:19 -07:00
Grant Sanderson
df9acfb4d5 Merge pull request #2009 from Varniex/patch-1
Correction of indices
2024-09-06 10:59:04 -07:00
Grant Sanderson
b6e5b0f34a Merge pull request #2036 from LinZezh1/fix_animation
Remove duplicate items
2024-09-06 10:57:32 -07:00
Grant Sanderson
6d23df0497 Clean up changes associated with fixing aspect ratio issue 2024-09-06 12:50:19 -05:00
Grant Sanderson
05a89d754e Merge pull request #2056 from germanzhu/fix-aspect-ratio
fix aspect_ratio other than 16:9 issue
2024-09-06 10:26:07 -07:00
Grant Sanderson
2178ec2b85 Merge branch 'master' into fix-aspect-ratio 2024-09-06 10:24:42 -07:00
Grant Sanderson
1f55832a6a Clean up around z_index 2024-09-06 12:20:26 -05:00
Grant Sanderson
aebf2220a6 Merge pull request #2057 from germanzhu/add-zorder-mobject
add zorder to mobject
2024-09-06 10:11:40 -07:00
Grant Sanderson
08f7cb8d3e zorder -> z_index 2024-09-06 10:11:31 -07:00
Grant Sanderson
c8326d1cce zorder -> z_index 2024-09-06 10:11:26 -07:00
Grant Sanderson
133cec9725 zorder -> z_index 2024-09-06 10:11:21 -07:00
Grant Sanderson
9812503597 Merge pull request #2059 from germanzhu/fix_vshowpassingflash
fix VShowPassingFlash index out of bounds issue
2024-09-06 09:39:06 -07:00
Grant Sanderson
9011c864fd Merge pull request #2061 from floatwoozy/dev
Error effect when rendering the same ImageMobject
2024-09-06 09:35:31 -07:00
Grant Sanderson
6b88947151 Merge pull request #2079 from TangentSquared/master
Modifying requirements.txt to include the latest version of IPython.
2024-09-06 09:31:47 -07:00
Grant Sanderson
30e6c357ed Merge pull request #2138 from MarkHoo/master
Update tex_templates.yml
2024-09-06 09:27:22 -07:00
Grant Sanderson
a5137a05f1 Merge pull request #2134 from jkjkil4/fix-there_and_back_with_pause
fix: `there_and_back_with_pause`
2024-09-06 09:25:31 -07:00
Grant Sanderson
21f9df8ccd Merge pull request #2163 from 3b1b/unify-vbo
Refactor ShaderWrapper
2024-09-06 09:17:48 -07:00
Grant Sanderson
8f1299929f Swap window buffer after blit from another fbo 2024-09-06 11:15:38 -05:00
Grant Sanderson
e7c540f415 Move texture id tracking to ShaderWrapper
Rather than having a globally unique id for each texture, dynamically allocate new texure ids within each ShaderWrapper, so that there is no upper bound on how many textures can be used.
2024-09-06 11:07:38 -05:00
Grant Sanderson
76fdd02db0 Go back to default fill border width of 0, except for String 2024-09-06 09:17:28 -05:00
Grant Sanderson
a713868f3d Add Mobject.get_opacities 2024-09-06 09:12:23 -05:00
Grant Sanderson
2836acc3c7 Have Write default stroke color match that of the mobject 2024-09-06 09:12:14 -05:00
Grant Sanderson
f378d33d01 Use doubled fill canvas so antialiasing doesn't depend on border width 2024-08-30 14:09:38 -05:00
Grant Sanderson
054261d86f Add zero point edge case for point_from_proportion 2024-08-29 14:10:37 -05:00
Grant Sanderson
04d77f2bec Fix joint angle for lines 2024-08-28 11:57:23 -05:00
Grant Sanderson
1e996dcd27 Fix Arrow.set_perpendicular_to_camera 2024-08-28 11:56:25 -05:00
Grant Sanderson
e85a1ce1b7 Add Arrow.set_perpendicular_to_camera 2024-08-28 10:50:51 -05:00
Grant Sanderson
22a6b47ec9 Always recompute unit normals on rotate 2024-08-26 11:46:43 -05:00
Grant Sanderson
55a798676a Always stop skipping after checkpoint_paste 2024-08-26 11:41:50 -05:00
Grant Sanderson
5cf5e497e7 Don't have joint_angles, unit_normal and path_end_indices get refreshed for shift/scale/rotate
Change unit_normal directly in rotate
In general, don't trigger refresh on apply_points_function
2024-08-26 11:41:32 -05:00
Grant Sanderson
7519ce15da Merge branch 'master' of github.com:3b1b/manim into unify-vbo 2024-08-26 10:20:44 -05:00
Grant Sanderson
f86245517d Merge pull request #2147 from osMrPigHead/fix-animation-time_span
fix(animation): `time_span` doesn't work for mobjects with submobjects
2024-08-26 08:20:11 -07:00
Grant Sanderson
36ea70d990 Remove whitespace 2024-08-26 09:14:53 -05:00
Grant Sanderson
cd5c436ce4 Tighter (albeit arbitrary) constraint on path end detection
This is really not great
2024-08-26 09:14:42 -05:00
Grant Sanderson
827f4db5e2 Clarify where normal is being inverted 2024-08-26 09:13:39 -05:00
Grant Sanderson
441ac77eae Change Euler axis limits for xz flat plane 2024-08-26 08:22:29 -05:00
Grant Sanderson
51de1fb650 For some reason RenderGroups must be groups for camera reorientation to function 2024-08-23 14:56:35 -05:00
Grant Sanderson
8785eb1844 Don't have quiet default changes to stroke_behind 2024-08-23 14:46:34 -05:00
Grant Sanderson
a823901b98 Only form render groups from Mobjects of the same type
I.e. bias against forming such groups
2024-08-23 14:45:27 -05:00
Grant Sanderson
513de19657 Clarify that ShaderWrapper id is an int 2024-08-23 14:44:00 -05:00
Grant Sanderson
fcc5dc00f9 Treat objects fixed in frame as having flat stroke 2024-08-23 14:17:26 -05:00
Grant Sanderson
566fc87a60 Don't keep an outer_vert_indices attribute 2024-08-23 14:11:05 -05:00
Grant Sanderson
499803159c Remove methods and tracking associated with triangulation and non-winding fill 2024-08-23 14:08:56 -05:00
Grant Sanderson
487c714d9b Remove stray new line 2024-08-23 13:56:16 -05:00
Grant Sanderson
e939e1de09 Tweak the correction for angle_diffs in get_joint_angles 2024-08-23 13:56:08 -05:00
Grant Sanderson
c26ebfc10f Have is_closed use the last path 2024-08-23 13:55:42 -05:00
Grant Sanderson
5d6a1f30c4 Count joints near 180 degrees as straight 2024-08-23 13:55:10 -05:00
Grant Sanderson
a08523d746 Fix get_subpath_end_indices_from_points 2024-08-23 13:29:31 -05:00
Grant Sanderson
bcafcbf490 Don't have VMobject refresh joint angles on shift, scale and rotate 2024-08-23 12:32:17 -05:00
Grant Sanderson
e4007f6915 Add glow dot to show light in SurfaceExample 2024-08-22 15:31:22 -05:00
Grant Sanderson
ada66ee8fb Remove stray comment 2024-08-22 15:31:10 -05:00
Grant Sanderson
bd2947be28 Use preferred group type for FadeTransform 2024-08-22 15:31:03 -05:00
Grant Sanderson
9a7bfdd1c9 For Surface, calculate normals with neighboring points 2024-08-22 15:21:40 -05:00
Grant Sanderson
c8d5e91422 Rename shader_dtype -> data_dtype 2024-08-22 14:52:35 -05:00
Grant Sanderson
09bed1f8f4 Allow more file_writer configuration in default_config.yml 2024-08-22 14:24:26 -05:00
Grant Sanderson
eda7f81fb9 Update VMobject.is_smooth 2024-08-21 17:22:34 -05:00
Grant Sanderson
d5575cf1ef Change how joint_angles are computed 2024-08-21 17:19:42 -05:00
Grant Sanderson
11df256369 Fix error rect 2024-08-21 16:49:08 -05:00
Grant Sanderson
cfe70ca869 Don't let Write override stroke_behind default 2024-08-21 16:47:51 -05:00
Grant Sanderson
bda894959b Keeps stroke width as a function of pixels, independent of zoom level 2024-08-21 16:12:56 -05:00
Grant Sanderson
d870bb29de Fix the non-flat stroke edge case for tangents near line of sight 2024-08-21 16:12:13 -05:00
Grant Sanderson
442206faad Go back to non-flat-stroke as the default 2024-08-21 16:05:02 -05:00
Grant Sanderson
ceac4fbe1a Fix up FillArrow 2024-08-21 15:58:57 -05:00
Grant Sanderson
22ee13a884 Have FillArrow take the place of StrokeArrow as the main Arrow 2024-08-21 14:52:54 -05:00
Grant Sanderson
eea8416d57 Default to allowing null lines, except for SVGPaths 2024-08-21 14:44:33 -05:00
Grant Sanderson
b3386ad7a7 Add an option for VMobject.add_line to add a null line 2024-08-21 14:29:40 -05:00
Grant Sanderson
c83d03aeb7 Simplify get_subpath_end_indices_from_points 2024-08-21 14:29:16 -05:00
Grant Sanderson
0a89725090 Tweaking what triggers refreshes 2024-08-21 13:57:54 -05:00
Grant Sanderson
0cb7a8f691 Only recompute subpath_end_indices as needed 2024-08-21 13:44:24 -05:00
Grant Sanderson
43f1704f69 Fix computation of joint_angles to handle zero division case 2024-08-21 13:44:00 -05:00
Grant Sanderson
941513d68c Only recompute VMobject.get_unit_normal as needed 2024-08-21 12:26:42 -05:00
Grant Sanderson
9a5386b022 Instead of passing in joint_products to stroke shader, just track joint_angles and pass in global unit normal 2024-08-21 11:59:48 -05:00
Grant Sanderson
67bedc6d1f Fix fill_depth_vert_format 2024-08-21 09:14:23 -05:00
Grant Sanderson
79ec791fc2 Move get_fill_canvas into VShaderWrapper 2024-08-21 09:02:22 -05:00
Grant Sanderson
748780378b Have stroke_behind default to True for VMobjects with fill and no stroke 2024-08-21 08:43:57 -05:00
Grant Sanderson
dfc5f152dd Have border width pre-multiply by alpha, and don't use a separate texture for that border width 2024-08-20 22:03:45 -05:00
Grant Sanderson
d0cb5b4eea Fix normal orientation on Surface 2024-08-20 14:47:47 -05:00
Grant Sanderson
35ce4c6704 Use Mobject.set_uniform in Mobject.set_shading 2024-08-20 14:44:48 -05:00
Grant Sanderson
7ddbd13e38 Ensure mobject uniforms get passed to ShaderWrapper on init 2024-08-20 14:44:09 -05:00
Grant Sanderson
304856e6e0 Remove indices_list argument on ShaderWrapper.read_in 2024-08-20 14:21:37 -05:00
Grant Sanderson
82582d08bd Fewer parameters for stroke frag shader 2024-08-20 13:32:52 -05:00
Grant Sanderson
a8784692e8 Reference new shader file structure 2024-08-20 12:58:53 -05:00
Grant Sanderson
0a313eb119 Reorganize quadratic bezier shader files 2024-08-20 12:58:34 -05:00
Grant Sanderson
5eb5a11499 Don't have absolute stroke width change with frame size (at least temporarily) 2024-08-20 12:36:28 -05:00
Grant Sanderson
0a585b123c Use stash_mobject_pointers on Mobject.deepcopy 2024-08-20 12:15:37 -05:00
Grant Sanderson
910f28f52e Don't have a default flat stroke in set_style 2024-08-20 12:13:18 -05:00
Grant Sanderson
7474ae17b0 Change default to flat stroke, except in 3d situations 2024-08-20 11:52:05 -05:00
Grant Sanderson
b8931e7b9c When shader_id is updated, have ancestors mark data as changed 2024-08-20 11:36:37 -05:00
Grant Sanderson
0414f8786c Use Mobject.set_uniform to reassign flat_stroke 2024-08-20 11:35:42 -05:00
Grant Sanderson
e0191d81d9 Instead of tracking _shaders_initialized, just check if self.shader_wrapper is None 2024-08-20 10:48:43 -05:00
Grant Sanderson
0ac9ee1fbf Don't deepcopy ShaderWrapper 2024-08-20 10:15:53 -05:00
Grant Sanderson
b9645ad196 Only update shader wrapper when stroke_behind genuinely changes 2024-08-20 10:00:52 -05:00
Grant Sanderson
87ca6e56aa Don't treat font size as a uniform 2024-08-20 10:00:07 -05:00
Grant Sanderson
e61957a4e0 Fix wrong check for path_func in last commit 2024-08-20 09:25:30 -05:00
Grant Sanderson
a8ef9629eb More direct lerp in Mobject.interpolate 2024-08-20 09:10:33 -05:00
Grant Sanderson
e796a0c6d6 Remove stray TODO 2024-08-20 09:10:14 -05:00
Grant Sanderson
5ff80ffc6c Fix matplotlib color map import 2024-08-20 08:54:06 -05:00
Grant Sanderson
f12b143d16 Unify get_shader_wrapper_list, and and better subdivide render groups by ShaderWrapper ids 2024-08-20 08:53:51 -05:00
Grant Sanderson
08e33faab8 Ensure scene properly updates on an embed 2024-08-19 21:49:39 -05:00
Grant Sanderson
0b2c59ac6b More explicitly unpack v_base_normal 2024-08-19 21:45:26 -05:00
Grant Sanderson
6223623b40 Ensure border width blends better within filled VMobject for opacity < 1 2024-08-19 21:39:53 -05:00
Grant Sanderson
7217c9fca5 Reorganize VShaderWrapper.render_fill 2024-08-19 20:51:37 -05:00
Grant Sanderson
b288d5301e Get rid of cached _has_stroke and _has_fill parameters 2024-08-19 17:27:47 -05:00
Grant Sanderson
058914fdd2 Mildly more efficient CameraFrame.get_view_matrix() 2024-08-19 16:54:29 -05:00
Grant Sanderson
c064b11e2a Interleave base_point and unit_normal in the same array 2024-08-19 16:50:49 -05:00
Grant Sanderson
b7337f0781 Remove some ShaderWrapper methods which are no longer needed 2024-08-19 14:45:12 -05:00
Grant Sanderson
195264f079 Stop pretending to support non-winding fill in the fill shader.
Possibly, if we want to reintroduce it later on, it should have its own dedicated shader, and maybe a distinct Mobject type too
2024-08-19 14:37:11 -05:00
Grant Sanderson
09d147c8ef Set default border width to 0.5, and keep it for opacities < 1 2024-08-19 14:35:19 -05:00
Grant Sanderson
39bcead679 Clean up 2024-08-19 14:22:10 -05:00
Grant Sanderson
28eba26bee Remove stray new line 2024-08-19 14:09:23 -05:00
Grant Sanderson
3b5d63d2fa Add depth shader to handle winding fill depth test. 2024-08-19 14:09:07 -05:00
Grant Sanderson
4cb16dfc0b Don't apply depth test during winding fill 2024-08-19 11:28:58 -05:00
Grant Sanderson
a12fa0c03d Remove attributes from VMobject which are now handled in VShaderWrapper 2024-08-19 10:04:28 -05:00
Grant Sanderson
4174f314b4 Reorganize, and ensure get_shader_wrapper_list works for general Groups 2024-08-19 09:17:58 -05:00
Grant Sanderson
f2bca0045f Add border width and backstroke 2024-08-19 08:18:45 -05:00
Grant Sanderson
24b160f9f9 Update VMobject shader wrapper
Use a combined VBO
Render with TRIANGLE_STRIP, and ignore every other
2024-08-19 08:05:32 -05:00
Grant Sanderson
f9b9cf69fd Update so that vbo is not recreated on each from, but is read into 2024-08-17 07:11:56 -05:00
Grant Sanderson
0efa96e399 Just use L-inf norm for point equality 2024-08-16 16:18:37 -05:00
Grant Sanderson
12d39ef37c Merge pull request #2161 from 3b1b/video-work
Adjustments to fill antialiasing
2024-08-16 13:25:40 -07:00
Grant Sanderson
ccc84f4ab1 Give Numbers a default border width 2024-08-16 15:21:29 -05:00
Grant Sanderson
bb42b66201 Include fill border width in style 2024-08-16 15:21:20 -05:00
Grant Sanderson
c20ce8d633 Have arrows default to flat stroke 2024-08-16 15:10:40 -05:00
Grant Sanderson
0267740bde Change STROKE_WIDTH_CONVERSION width back to older value 2024-08-16 15:03:47 -05:00
Grant Sanderson
d8edccdab4 Fix zero stroke width issue 2024-08-16 14:59:18 -05:00
Grant Sanderson
108db87087 Rather than ignoring border with for non-one opacity, go back to having set_fill default to setting 0 border width for intermediate opacities 2024-08-16 12:38:11 -05:00
Grant Sanderson
21c0bcb8b6 Don't wait for animations while skipping 2024-08-16 12:20:49 -05:00
Grant Sanderson
902a4f264e Add white space after assert statements 2024-08-16 12:15:55 -05:00
Grant Sanderson
3f15715ff1 Use _data_defaults for initializing fill border width 2024-08-16 12:10:37 -05:00
Grant Sanderson
174f318602 Push _data_default initialization into init_data 2024-08-16 12:10:07 -05:00
Grant Sanderson
430a88cf13 Change default border width to 0, and only draw it for opacity 1 2024-08-16 12:05:47 -05:00
Grant Sanderson
4a6e6ca646 Double the size of the fill canvas, to effectively do msaa 2024-08-16 12:04:27 -05:00
Grant Sanderson
e2b0c2b9bf Merge pull request #2160 from 3b1b/video-work
Fix low resolution thin stroke issue
2024-08-15 15:13:20 -07:00
Grant Sanderson
04347e7876 Fix thin stroke issue for low resolutions 2024-08-15 17:11:02 -05:00
Grant Sanderson
df0ae6fdc9 Fix missing ignore_skipping -> force_draw 2024-08-15 16:40:16 -05:00
Grant Sanderson
59235d3eed Include flat stroke in get_style, set_style, match_style 2024-08-15 15:37:55 -05:00
Grant Sanderson
0fa74a7921 Merge pull request #2159 from 3b1b/video-work
Energy savings
2024-08-15 12:08:51 -07:00
Grant Sanderson
65d5947966 Change ignore_skipping name to force_draw 2024-08-15 14:05:32 -05:00
Grant Sanderson
a5ba721f96 Cease useless rendering
Change so that with a live window, rendering only happens if there has been an event (mouse motion, key press, etc.) to respond to.
2024-08-15 14:03:16 -05:00
Grant Sanderson
c7acbe5de6 Brighten up fill 2024-08-15 10:53:46 -05:00
osMrPigHead
644084d9a7 Merge branch '3b1b:master' into fix-animation-time_span 2024-08-15 15:11:30 +08:00
Grant Sanderson
af8e5236d2 Merge pull request #2157 from 3b1b/video-work
3d stroke bug fix
2024-08-13 16:05:01 -07:00
Grant Sanderson
a4858918dd Small reformatting 2024-08-08 13:59:50 -07:00
Grant Sanderson
31b6affabb Push up pointwise styling update 2024-08-08 13:56:16 -07:00
Grant Sanderson
cff3bdf8d4 Remove unnecessary flat stroke option 2024-08-08 13:55:48 -07:00
Grant Sanderson
9f54b85c4e Change miter threshold to global constant 2024-08-08 13:55:25 -07:00
Grant Sanderson
c345d76de0 Patch for glitches associated with non-flat stroke when tangency direction lines up with camera view 2024-08-08 11:36:28 -05:00
Grant Sanderson
aad2bded14 Merge pull request #2155 from 3b1b/video-work
Update how stroke is rendered
2024-08-07 13:13:17 -07:00
Grant Sanderson
1ff758dea8 Remove (no longer necessary) specifications of non-flat stroke for 3d things 2024-08-07 15:06:10 -05:00
Grant Sanderson
bf43a648a4 Allow for setting flat stroke in VMobject.set_stroke 2024-08-07 14:54:37 -05:00
Grant Sanderson
099aaaee43 Increase polyline factor 2024-08-07 14:46:26 -05:00
Grant Sanderson
70862a068f Don't buff out stroke width by antialias width 2024-08-07 14:46:17 -05:00
Grant Sanderson
f677a02036 Allow for manually setting miter or bevel joints 2024-08-07 14:45:55 -05:00
Grant Sanderson
bc91e91634 In get_euler_angles, add edge case for gimbal lock on the low side 2024-08-07 14:11:10 -05:00
Grant Sanderson
0a43a3ff9a Remove unnecessary stroke vert input 2024-08-07 14:10:50 -05:00
Grant Sanderson
e130625b9b Handle edge case of single point passed into approx_smooth_quadratic_bezier_handles 2024-08-07 12:12:29 -05:00
Grant Sanderson
0dcf630222 Change default to non-flat stroke rendering 2024-08-07 11:23:37 -05:00
Grant Sanderson
61a2b4d0da Improve flat stroke for sharp corners with a smooth transition to miter joints 2024-08-07 10:34:47 -05:00
Grant Sanderson
edb438e5e2 Further clean up to stroke shader 2024-08-06 15:45:21 -05:00
Grant Sanderson
ec88673e92 Fix kink issue in flat stroke 2024-08-06 10:41:31 -05:00
Grant Sanderson
44ec9933b7 Small format fix 2024-08-06 10:39:23 -05:00
Grant Sanderson
4ff61ed561 Default approximate smoothing (non-approx has a bug in 3d) 2024-08-06 10:27:35 -05:00
Grant Sanderson
4223bb6320 Small cleanup on TracedPath 2024-08-06 10:23:46 -05:00
Grant Sanderson
b45c71d3c2 Account for Gimbal lock in panning 2024-08-05 16:58:03 -05:00
Grant Sanderson
2b6ec2d95f Add spacing on assert lines 2024-08-05 15:01:20 -05:00
Grant Sanderson
a5926195ee Clean up stroke shader 2024-08-05 15:01:02 -05:00
Grant Sanderson
557819ad03 Remove pre-computation of curve points and joint products 2024-08-05 14:25:15 -05:00
Grant Sanderson
f363eaa2fd Add stand in for a ribboning effect 2024-08-05 13:37:34 -05:00
Grant Sanderson
c61c18486c Don't bevel corners on inner joints of quadratic bezier curves 2024-08-05 13:37:17 -05:00
Grant Sanderson
26249c34bb Have non-flat stroke operate based on projecting tangents 2024-08-05 09:15:06 -05:00
Grant Sanderson
b3bbc31ea9 Small clean up to stroke shaders 2024-08-03 08:12:00 -05:00
Grant Sanderson
71814a118b Fix dot updater in graph example 2024-08-01 07:56:26 -05:00
Grant Sanderson
d644e3b184 Merge branch 'master' of github.com:3b1b/manim 2024-08-01 07:55:11 -05:00
Grant Sanderson
78ddfe29c0 Merge pull request #2153 from 3b1b/simpler-stroke
Simpler stroke
2024-08-01 05:53:10 -07:00
Grant Sanderson
8f78e2e127 Merge pull request #2152 from 3b1b/video-work
Video work
2024-08-01 05:43:29 -07:00
Grant Sanderson
5decf810e7 Change default anti_alias_width to 1.5 2024-08-01 07:41:45 -05:00
Grant Sanderson
aea747b6d3 Final refinements on polyline stroke implementations 2024-08-01 07:41:32 -05:00
Grant Sanderson
361817b506 Pass fewer values to frag shader 2024-08-01 07:17:26 -05:00
Grant Sanderson
a3469c236e Simpler compute_subdivisions 2024-08-01 06:32:04 -05:00
Grant Sanderson
c6a6503544 Cleaning up first pass implementation 2024-07-31 16:27:37 -04:00
Grant Sanderson
3ea8393e9a First pass at a polyline implementation for stroke 2024-07-31 15:51:06 -04:00
Grant Sanderson
5aeb457bb1 Hot fix for Traicing Tail 2024-07-31 15:32:17 +02:00
Grant Sanderson
bbc89d13e9 Don't save state after each embed cell call 2024-07-31 15:32:08 +02:00
Grant Sanderson
a105216a47 Small clean up 2024-07-31 15:31:26 +02:00
Grant Sanderson
c1efd14904 Add touch and notouch to embed vocabulary 2024-07-31 15:24:50 +02:00
Grant Sanderson
a7765dcac3 Change copy frame position command 2024-07-31 15:24:25 +02:00
Grant Sanderson
57d4732ef1 Remove unused lines 2024-07-31 15:23:59 +02:00
Grant Sanderson
d1314e5a3c Catch screeninfo.ScreenInfoError error 2024-07-31 15:23:41 +02:00
Grant Sanderson
79c89ad34d Remove (outdated) background rectangle arg from example scene 2024-07-31 15:23:16 +02:00
osMrPigHead
0eae42977a fix(animation): time_span doesn't work for mobjects with submobjects 2024-07-23 15:55:06 +08:00
Grant Sanderson
a07ccf4aca Include *args, **kwargs in embed shell event pre_cell and post_cell functions 2024-06-24 15:22:22 -07:00
Grant Sanderson
4feb831a11 Pass group parameter in LaggedStartMap -> AnimationGroup 2024-06-24 15:21:09 -07:00
Michael
63e98eee94 Update tex_templates.yml
Fix the error when using Chinese, and add international typesetting support
2024-06-04 23:47:19 +08:00
jkjkil4
ab28804ae5 fix: there_and_back_with_pause 2024-05-22 16:37:07 +08:00
Grant Sanderson
88c7e9d2c9 Merge pull request #2132 from pdancstep/example-correction
Removed old argument from example
2024-05-03 11:34:56 -07:00
Grant Sanderson
3c374c3e92 Merge pull request #2108 from kubanemil/integer_matrix
remove include_background_rectangle
2024-05-03 11:34:32 -07:00
pdancstep
c970f776bb Removed old argument from example 2024-05-03 11:29:57 -07:00
Grant Sanderson
772a328302 Have FadeTransform target match all uniforms of source 2024-04-12 21:52:08 -04:00
Grant Sanderson
f5d1a9c449 Keep track of original float matrix in DecimalMatrix 2024-03-25 19:10:42 -03:00
Grant Sanderson
920f2407e0 Revert default underline stroke width 2024-03-25 19:10:30 -03:00
Grant Sanderson
7565e936fa Better bubble flipping 2024-03-25 19:10:16 -03:00
Grant Sanderson
1d6aa47933 Reimplement SpeechBubble and ThoughtBubble 2024-03-21 14:36:17 -03:00
Grant Sanderson
0509e824c6 Have border_width default to 0 for lower opacity 2024-03-21 14:36:06 -03:00
Grant Sanderson
ec42326618 Fix remover=True case for FadeTransform 2024-03-21 14:35:33 -03:00
Grant Sanderson
223d671eea Remove redundancy 2024-03-21 14:34:39 -03:00
Grant Sanderson
7e6a37d499 Typo fix: make_number_changable -> make_number_changeable 2024-03-21 10:03:41 -03:00
Grant Sanderson
6b3834739c Undo redundant previous tweak to LaggedStartMap input type 2024-03-21 10:00:11 -03:00
Grant Sanderson
b26feb7045 Adjust Underline configuration 2024-03-21 09:59:29 -03:00
Grant Sanderson
7db69e32aa Update input type to LaggedStartMap 2024-03-16 11:10:52 -03:00
Grant Sanderson
fa99eafe2b Account for rgba case in point_to_rgb 2024-03-16 11:10:42 -03:00
emil
8235607b2a remove include_background_rectangle 2024-03-11 17:18:52 +06:00
Grant Sanderson
4729e44e05 Merge pull request #2106 from 3b1b/video-work
Video work
2024-03-07 11:53:20 -08:00
Grant Sanderson
27f397e0a6 Have stroke width change continuously with fixed_in_frame status 2024-03-07 16:47:24 -03:00
Grant Sanderson
226d649ee6 Change UpdatersExample scene to feature .always and .f_always syntax 2024-03-07 16:42:40 -03:00
Grant Sanderson
d3ba101ee5 Change from tracking time_based_updater and non_time_updater lists separately to just tracking one list 2024-03-07 16:39:45 -03:00
Grant Sanderson
83cd5d6246 Clean up updater matters, prune unused functions 2024-03-07 16:07:39 -03:00
Grant Sanderson
70b839e188 Change to only compute has_updater status as needed 2024-03-07 15:34:26 -03:00
Grant Sanderson
fd35433a62 Change name note_updated_family -> note_changed_family 2024-03-07 15:32:15 -03:00
Grant Sanderson
4b14c11e4b Only reconstruct family as needed 2024-03-07 13:49:07 -03:00
Grant Sanderson
e124aecd6b Clarify Mobject.needs_new_bounding_box is private 2024-03-07 13:27:29 -03:00
Grant Sanderson
3c778ba678 Add comment to Mobject.animate 2024-03-07 13:27:09 -03:00
Grant Sanderson
a6b46c641b Add Mobject.always and Mobject.f_always
For nicer syntax in creating updaters
2024-03-07 10:17:01 -03:00
Grant Sanderson
2380ffd616 Allow LaggedStart to accept an iterable as an argument 2024-03-07 09:41:47 -03:00
Grant Sanderson
1372cf101c Allow VGroup and Group to accept generators and iterables as arguments 2024-03-07 09:23:02 -03:00
Grant Sanderson
4d67361800 Add shuffled 2024-03-07 08:40:19 -03:00
Grant Sanderson
a5f2ac689f Spacing 2024-03-07 08:40:10 -03:00
Grant Sanderson
2e9c89502d Restrict alpha in CountInFrom 2024-03-07 08:39:45 -03:00
Grant Sanderson
9432a73a9f Let checkpoint_paste work on methods of the current scene 2024-03-02 16:49:54 -05:00
Grant Sanderson
ffbe5c8114 Add type hints for affects_mobject_list 2024-03-02 16:49:35 -05:00
Grant Sanderson
7edc4b64ad Replace numbers_with_elongated_ticks -> big_tick_numbers 2024-02-22 11:47:28 -08:00
Grant Sanderson
e784c42f0d Add big_tick_spacing option NumberLine 2024-02-22 11:45:31 -08:00
Grant Sanderson
4a89376fdd Add method for resetting which plane in 3d space behaves like the floor when panning 2024-02-21 12:42:59 -08:00
Grant Sanderson
712fa30174 Ensure Brace.get_tex uses buff key word arg 2024-02-21 12:25:43 -08:00
Grant Sanderson
5632fee9a3 Ensure get_opacity returns float 2024-02-21 12:25:26 -08:00
Grant Sanderson
7b577e9fc1 Have matrix keep track of elements and ellipses as lists instead of VGroups 2024-02-13 14:52:16 -06:00
Grant Sanderson
ed3ac74d67 Add option to change Euler axes 2024-02-13 14:48:56 -06:00
Grant Sanderson
4ce8a3ba9d Fix computation of normals for Surface 2024-02-13 14:48:00 -06:00
Grant Sanderson
d44e248277 Specify type of argument in Mobject.add 2024-02-09 17:48:25 -06:00
Grant Sanderson
578427543c Add defaults for Matrix object to have ellipses 2024-02-09 17:48:02 -06:00
Grant Sanderson
c531e56a2f Fix DecimalNumber.set_value font size issue 2024-02-08 14:55:12 -06:00
Grant Sanderson
45f8ca7643 Specify output type for DecimalMatrix.element_to_mobject 2024-02-08 14:44:12 -06:00
Grant Sanderson
2966f358a3 Pull type definitions used for Generic[SubmobjectType] outside of if TYPE_CHECKING block 2024-02-08 14:43:37 -06:00
Grant Sanderson
8417369da1 Performance improvement for DecimalNumber.set_value 2024-02-08 14:42:46 -06:00
Grant Sanderson
f3571cf2cb Add random import 2024-02-08 14:37:58 -06:00
Grant Sanderson
e4c824e672 Update random_bright_color to operate based on hsl ranges 2024-02-08 14:37:46 -06:00
Grant Sanderson
31b2bcd9e6 Add interpolate_color_by_hsl 2024-02-08 14:37:30 -06:00
Grant Sanderson
100b108ad1 Treat Group and VGroup more like list types
This may not be the best way to address it, but at least temporarily it prevents linting issues for calls like VGroup(Circle())[0].get_radius()
2024-02-05 15:02:13 -06:00
Grant Sanderson
7009f0f53e Add space after assert 2024-02-03 19:11:18 -06:00
Grant Sanderson
dfa96c2047 Update copy_frame_positioning 2024-02-03 18:49:04 -06:00
Grant Sanderson
ebe689dede Treat is_fixed_in_frame as a float in uniforms, to allow for transformations between 2024-02-03 18:48:54 -06:00
Grant Sanderson
4aef0d1bf5 Add add_ambient_rotation 2024-02-03 18:48:16 -06:00
Grant Sanderson
661814deea Add all orientation options into CameraFrame.reorient 2024-02-03 18:48:07 -06:00
Grant Sanderson
45d9049405 Minor clean up 2024-02-03 18:47:39 -06:00
Grant Sanderson
711438f625 Update the types in decorator methods using @wraps
This is method to address issues flagged by pyright
2024-02-03 18:00:47 -06:00
Grant Sanderson
cde709fcfa Replace fix_in_frame matching for DecimalNumber.set_value to general uniform matching 2024-01-19 17:42:52 -06:00
Grant Sanderson
1c72059725 Have surrounding rectangle match framed fixed status of what it surrounds 2024-01-19 17:42:29 -06:00
Grant Sanderson
d3dee240c3 Allow for smooth transitions between mobjects fixed and unfixed from the frame 2024-01-19 17:42:12 -06:00
Grant Sanderson
60b762ca43 Remove redundant and unused get_gl_Position.glsl file 2024-01-19 17:41:46 -06:00
Grant Sanderson
8179ba88d0 Reformat defaults for n_rows and n_cols in Mobject.arrange_in_grid 2024-01-18 11:13:12 -06:00
Grant Sanderson
855ef9be8d Refactor Matrix, DecimalMatrix, MobjectMatrix, etc. 2024-01-18 11:12:42 -06:00
Grant Sanderson
2c110790d2 Merge pull request #2094 from 3b1b/video-work
Video work
2024-01-17 13:08:43 -08:00
Grant Sanderson
41ece958fd Explicitly call out global naure of ID_TO_TEXTURE map 2024-01-17 15:02:19 -06:00
Grant Sanderson
88672a21ff Include texture id in shader wrapper id
This ensure that, among other things, ImageMobjects appearing in groups don't get lumped together in rendering.
2024-01-17 15:01:49 -06:00
Grant Sanderson
9ba684d35f Merge pull request #2028 from rudransh61/master
Update installation.rst added FFmpeg install
2024-01-01 12:55:18 -08:00
Grant Sanderson
f8fedffa4c Use rate function on MoveAlongPath 2023-12-02 21:28:22 -06:00
TangentSquared
fa017b94d9 Update requirements.txt
Now, the ipython version needs to be 8.18.0 or greater
2023-12-02 19:23:54 +05:30
Grant Sanderson
dcf3eb8416 Ignore pyright configuration 2023-11-06 12:36:34 -05:00
Grant Sanderson
8a4d7b4e8c Add a small hack to ensure Window resets properly in non-primary monitors 2023-11-06 12:34:39 -05:00
Grant Sanderson
246a010799 Add default border width to StringMobject 2023-11-06 12:33:56 -05:00
Grant Sanderson
17cd597904 Have Arrow track what stroke width it was set to 2023-11-06 12:33:26 -05:00
Grant Sanderson
2cdb85cae9 Don't assign a fixed default depth to ThreeDAxes 2023-11-06 12:32:47 -05:00
Grant Sanderson
0d046a7eab Add an option for a graph to continually update to its defining function 2023-11-06 12:32:27 -05:00
Grant Sanderson
cbc32468bf Note chanted stroke and fill after DrawBorderThenFill has complete 2023-11-06 12:31:52 -05:00
Grant Sanderson
f4778b57ef Have Animation keep track of whether a mobject had had it's updating suspended before resuming it at the end 2023-11-06 12:31:16 -05:00
Grant Sanderson
916ab94efd Remove white space 2023-10-09 14:17:44 -05:00
Grant Sanderson
a8b1791ff5 Small tweaks to arrow tip implementation 2023-09-04 21:16:36 -07:00
Grant Sanderson
39e5d24858 Factor out partial results from point_from_proportion 2023-09-04 21:16:18 -07:00
Grant Sanderson
295a0f76cc Formatting tweak 2023-09-04 21:15:53 -07:00
Grant Sanderson
2b00a9cf80 Fix add_curve_to 2023-09-04 21:15:43 -07:00
Grant Sanderson
b53ab02675 Simplify initialization of Line with path arc 2023-09-04 20:49:51 -04:00
Grant Sanderson
5f41e238ba Improve VMobject.add_arc_to 2023-09-04 20:49:36 -04:00
Grant Sanderson
690eb24562 Add VMobject.add_arc_to method 2023-09-04 19:31:40 -04:00
Grant Sanderson
60a4f0e167 Factor out Arc.create_quadratic_bezier_points to quadratic_bezier_points_for_arc 2023-09-04 19:08:13 -04:00
Grant Sanderson
0a642133ad Add scale_radii method for DotCloud 2023-09-04 18:46:28 -04:00
Grant Sanderson
87e4a71ca3 Add surround method for Rectangles and SurroundingRectangles 2023-09-04 18:46:11 -04:00
Fuwuwuwu
7278095921 Change ImageMobject rendering mode to TRIANGLES
And add vertices
2023-09-03 08:55:03 +08:00
german2020
f0a61beaf5 fix VShowPassingFlash index out of bounds issue 2023-08-28 10:10:51 +08:00
german2020
0b5e9d4a8b add zorder to mobject 2023-08-27 15:35:22 +08:00
german2020
65e7943ff7 fix aspect_ratio other than 16:9 issue 2023-08-27 13:51:54 +08:00
Grant Sanderson
fa798a2018 Add \dots and \mathds to tex_to_symbol_count 2023-08-15 20:40:39 -07:00
Grant Sanderson
13d4ab1eb0 Stylistic change 2023-08-15 20:40:24 -07:00
Grant Sanderson
c8cf83eedf Add cartesian_product 2023-08-15 20:40:15 -07:00
Grant Sanderson
eafd09549d Handle make_jagged for empty VMobjects 2023-08-15 20:40:01 -07:00
Grant Sanderson
f2ad9a70f7 Small format fix 2023-08-15 20:39:27 -07:00
Grant Sanderson
4be7f611ec Fix issues with stroke opacities passed as numpy arrays 2023-08-15 20:38:55 -07:00
Grant Sanderson
d21b05ae0d Arrow fix 2023-08-15 20:37:54 -07:00
Grant Sanderson
fc522e5278 Change width_to_tip_len -> tip_len_to_width 2023-08-15 20:37:13 -07:00
Grant Sanderson
ddf2f7d9bd Fix typo 2023-08-15 20:36:45 -07:00
Grant Sanderson
2337be2318 Remove num_sampled_graph_points_per_tick in Axes __init__ 2023-08-15 20:36:36 -07:00
Grant Sanderson
7954ba14ef Use rate_function appropriately in ShowIncreasingSubsets 2023-08-15 20:35:42 -07:00
LinZeZhi
c65b7242e4 Remove duplicate items 2023-06-29 10:18:44 +08:00
Grant Sanderson
7ff45b4637 Having changing decimal match fixed_in_frame status 2023-06-23 10:57:57 -07:00
Grant Sanderson
4f42ebeb4f Small formatting tweaks 2023-06-10 09:26:20 -07:00
Grant Sanderson
21d20541b5 Add texture_names_to_ids to ShaderWrapper 2023-06-10 09:25:44 -07:00
Grant Sanderson
0609c1bfa8 Change default saturation and gamma to each be 1 2023-06-10 09:25:03 -07:00
Grant Sanderson
162fd4a92b Change defaults for where videos are saved
Save them directly to the relevant output directory, rather than to a "videos" subdirectory within it.
2023-06-10 09:24:50 -07:00
Grant Sanderson
cb02066f22 Add always_depth_test option to ThreeDScene, default to true 2023-06-10 09:23:19 -07:00
Grant Sanderson
3e64111952 Change default on VMobject to no depth test 2023-06-10 09:22:55 -07:00
Grant Sanderson
6f8ea7433d Small formatting tweaks 2023-06-10 09:22:34 -07:00
Grant Sanderson
bae3b98c0b Fixes to Surface 2023-06-10 09:22:15 -07:00
Grant Sanderson
63f6e9d84f Add Dartboard 2023-06-10 09:21:57 -07:00
Grant Sanderson
f01b990c2e Add default Mobject.match_style 2023-06-10 09:21:45 -07:00
Grant Sanderson
fa1080d59a Be sure reverse_points changes data in place 2023-06-10 09:21:32 -07:00
Grant Sanderson
ce7422f8af Add ThreeDAxes.get_graph and .get_parametric_surface 2023-06-10 09:21:02 -07:00
Grant Sanderson
16f5890fd3 Add CoordianteSystem.get_area_under_graph
This is not perfect, since one could optionally add a different color for negative area.
2023-06-10 09:20:28 -07:00
Grant Sanderson
5d9a7f49e6 Add taper_width argument to FlashAround 2023-06-10 09:19:48 -07:00
Grant Sanderson
f33b8d1d2f Add stretch_factor in FlashUnder Underline 2023-06-10 09:19:32 -07:00
Rudransh Bhardwaj
71ab276e05 Update installation.rst added FFmpeg install
Added how to install ffmpeg
2023-05-26 16:24:30 +05:30
Dishant Varshney
3b2904b4c7 Correction of indices 2023-04-02 03:16:09 +05:30
Grant Sanderson
de8e9e5ec1 Fix error with setting bubble direction 2023-03-14 10:35:04 -07:00
Grant Sanderson
6b24860bbf Tweak default configuration for Underline 2023-03-14 10:34:44 -07:00
Grant Sanderson
0d415036a9 Ensure exact integers are displays for large values in Integer 2023-03-14 10:34:33 -07:00
Grant Sanderson
80fb1a98a9 Add \text to TEX_TO_SYMBOL_COUNT 2023-03-10 11:05:50 -08:00
Grant Sanderson
d1e2a7a157 Make sure \text{...} is counted correctly in num_tex_symbols 2023-03-10 11:05:30 -08:00
Grant Sanderson
b644bb51de Update submobjects before parents 2023-03-10 11:05:07 -08:00
Grant Sanderson
392019fc6e Specify type in bind_to_graph 2023-03-10 11:04:49 -08:00
Grant Sanderson
6d0b586597 Prevent index out of range error for ShowSubmobjectsOneByOne 2023-03-10 11:04:25 -08:00
Grant Sanderson
b216b8f7e3 Reset default in set_style to stroke_background = False 2023-02-24 08:23:24 -05:00
Grant Sanderson
1eb819363d Fix issue with ticks going beyond number line 2023-02-24 08:23:01 -05:00
Grant Sanderson
a79d4a862f Keep track of dots in DieFace 2023-02-24 08:22:24 -05:00
Grant Sanderson
3f2d15986a Make TrueDot shading in 3d work 2023-02-16 16:47:59 -08:00
Grant Sanderson
c372ef4aaa Faster VMobject.get_arc_length 2023-02-16 15:02:30 -08:00
Grant Sanderson
3a05352f73 Add poly_line_length function 2023-02-16 15:02:15 -08:00
Grant Sanderson
dcb58c1f4f Remove arg_creator arg from LaggedStartMap
Anything that enables is better done just with LaggedStart
2023-02-15 20:55:26 -08:00
Grant Sanderson
576a26493e Use quick_point_from_proportion in MoveAlongPath 2023-02-15 20:54:59 -08:00
Grant Sanderson
d8428585f8 Merge pull request #1994 from 3b1b/video-work
Several bug fixes
2023-02-15 09:40:43 -08:00
Grant Sanderson
557cb66c52 Fix transparent background videos 2023-02-15 09:38:35 -08:00
Grant Sanderson
01c51dbc6d animation.update_config -> animation.update_rate_info 2023-02-09 15:16:51 -08:00
Grant Sanderson
ad409999dc Small tweak 2023-02-09 15:16:33 -08:00
Grant Sanderson
b39fbb62f4 Ensure joint_products are refreshed for _AnimationBuilder 2023-02-09 15:16:10 -08:00
Grant Sanderson
3e3e4de5e9 Add option for gamma correction to SceneFileWriter 2023-02-08 20:09:33 -08:00
Grant Sanderson
ded06c1f88 Give SceneFileWriter an option for saturation, and set default to 1.7
The colors in a scene can look a little different in a preview window vs. in the rendered file written by ffmpeg. This is mean to bring them closer together.
2023-02-08 19:41:07 -08:00
Grant Sanderson
f2c07afe74 add 'return self' 2023-02-08 19:39:49 -08:00
Grant Sanderson
169e7a302b Give ThreeDAxes flat stroke by default 2023-02-08 19:39:37 -08:00
Grant Sanderson
0ce972991b Remove num_axis_pieces arg from ThreeDAxes 2023-02-08 19:39:22 -08:00
Grant Sanderson
41f0239e9d Merge pull request #1992 from 3b1b/bug-fix
Fix for index -3 error
2023-02-08 10:40:40 -08:00
Grant Sanderson
1844f7fd64 Fix for https://github.com/3b1b/manim/issues/1991 2023-02-08 10:39:07 -08:00
Grant Sanderson
66b78d01a9 Merge pull request #1989 from 3b1b/video-work
A few more fixes and tweaks.
2023-02-04 16:57:13 -08:00
Grant Sanderson
d1b1df64a5 Ensure Window's scene always points back to window
Issues can arise in the few milliseconds of startup otherwise.
2023-02-04 16:51:14 -08:00
Grant Sanderson
4e90a77fcd Change type hint on LaggedStart to accept any functions outputting animations 2023-02-04 16:50:12 -08:00
Grant Sanderson
7d1330fa68 Check if mobject_uniforms is None 2023-02-04 16:49:32 -08:00
Grant Sanderson
c918e84784 Change default progress bar format 2023-02-03 18:10:29 -08:00
Grant Sanderson
e3b95276fa Update TexTransformExample, and pull out TexIndexing 2023-02-03 17:48:51 -08:00
Grant Sanderson
3bf9e40aba Add more lenient tolerance to Mobject.has_same_shape_as 2023-02-03 17:35:20 -08:00
Grant Sanderson
fab917ccee Improve TransformMatchingString to match longest common substrings by default 2023-02-03 17:28:27 -08:00
Grant Sanderson
b8fe7b0172 Note that restoring state affects the mobject list 2023-02-03 17:28:00 -08:00
Grant Sanderson
a54d1eddfc Set default pixel format to yuv420p 2023-02-03 12:48:56 -08:00
Grant Sanderson
e1bb360e0b Add CLI args for setting video codec and pixel forma 2023-02-03 12:46:01 -08:00
Grant Sanderson
12dc124d72 Revert to simple progress_description_len default 2023-02-03 11:46:03 -08:00
Grant Sanderson
bc107787cc Clean up get_scenes_to_render 2023-02-03 11:45:47 -08:00
Grant Sanderson
b25f022859 Make it an option (default to false) to prerun a scene to calculate its number of frames 2023-02-03 11:06:07 -08:00
Grant Sanderson
7c561d3757 Edit set_program_uniform 2023-02-03 11:05:40 -08:00
Grant Sanderson
ac3db9b636 Add set_program_uniform function 2023-02-02 21:13:18 -08:00
Grant Sanderson
772ea792d0 Add check for null VMobject in shader init 2023-02-02 21:12:42 -08:00
Grant Sanderson
ee08c552bf Remove ShaderWrapper.get_program_id 2023-02-02 20:49:13 -08:00
Grant Sanderson
c4777015fc FIx Mobject.replace_shader_code 2023-02-02 20:47:55 -08:00
Grant Sanderson
d10745a379 Have CameraFrame.get_view_matrix and and CameraFrame.get_implied_camera_location use _data_has_changed instead of a refresh arg 2023-02-02 20:47:12 -08:00
Grant Sanderson
88959df7a8 Use set_color instead of set_rgba_array in vector_field 2023-02-02 18:24:12 -08:00
Grant Sanderson
3d0fe27c55 Simplify VMobject.set_rgba_array 2023-02-02 18:23:41 -08:00
Grant Sanderson
4629e08769 Ensure joint_products are computed at both the start and end of an animation 2023-02-02 18:17:12 -08:00
Grant Sanderson
009f9dd18b Don't call become at the end of Transform 2023-02-02 18:16:44 -08:00
Grant Sanderson
7f940fbee4 Change how ShaderWrapper uniforms are handled 2023-02-02 17:45:52 -08:00
Grant Sanderson
fbcbbc9a58 Merge pull request #1988 from 3b1b/video-work
Several minor fixes
2023-02-02 16:28:43 -08:00
Grant Sanderson
1dcc678b2f Make sure animating a VGroup uniforms will have an effect 2023-02-02 16:18:09 -08:00
Grant Sanderson
ad2e7144b4 Lock uniform keys, the same way data keys are 2023-02-02 16:17:26 -08:00
Grant Sanderson
e36719a21b Use resize_points in Mobject.set_data 2023-02-02 15:37:10 -08:00
Grant Sanderson
c4d698a169 Have Transform only copy target_mobject if it must 2023-02-02 15:36:58 -08:00
Grant Sanderson
0e60b124eb Only compute const_data_keys for unlocked data 2023-02-02 15:02:55 -08:00
Grant Sanderson
d263fa23fa Merge pull request #1986 from 3b1b/video-work
A few small performance improvements
2023-02-02 14:49:49 -08:00
Grant Sanderson
6f2cbc4d1f Merge branch 'master' of github.com:3b1b/manim into video-work 2023-02-02 14:47:44 -08:00
Grant Sanderson
4e674e571c Merge pull request #1987 from 3b1b/interactive-scene-update
Interactive scene update
2023-02-02 14:47:32 -08:00
Grant Sanderson
be602930c3 Check that scene has a camera frame in pixel_to_point_coords 2023-02-02 14:46:07 -08:00
Grant Sanderson
9cadfa1818 Make it so that copying a mobject will copy its name, if applicable 2023-02-02 14:46:07 -08:00
Grant Sanderson
b9d37a9f7e Add copy_frame_anim_call 2023-02-02 14:46:07 -08:00
Grant Sanderson
d0c6d4d386 Accept list of Vect3 as an input to Mobject.set_points 2023-02-02 14:46:07 -08:00
Grant Sanderson
3c0d682efc Change clicking behavior in InteractiveScene 2023-02-02 14:46:07 -08:00
Grant Sanderson
63dbe3b23f More direct check for family_members_with_points 2023-02-02 14:32:55 -08:00
Grant Sanderson
bd89056c8e Only recalculate outer_vert_indices when points are resized 2023-02-02 14:29:37 -08:00
Grant Sanderson
b9d6dcd67d Save _has_fill and _has_stroke to prevent unnecessary recalculation 2023-02-02 14:26:08 -08:00
Grant Sanderson
e5eed7c36a Batch render groups by Mobject type 2023-02-02 13:28:06 -08:00
Grant Sanderson
acb4b1c6b3 Finalize color at the vertex level, rather than the fragment level, for fill 2023-02-02 12:04:23 -08:00
Grant Sanderson
a1b9eae301 Merge branch 'master' of github.com:3b1b/manim into video-work 2023-02-02 11:40:23 -08:00
Grant Sanderson
7476740980 Merge pull request #1985 from 3b1b/cleaner-winding-fill
Cleaner winding fill
2023-02-02 11:39:18 -08:00
Grant Sanderson
c3823e722d Update fill shader alpha blending, and simplify the fill canvas 2023-02-02 11:28:20 -08:00
Grant Sanderson
0cf9a35367 Have SVG subdivide intersections if winding fill is not a default 2023-02-02 11:28:20 -08:00
Grant Sanderson
594b9258da Account for unnecessary calls to use_winding_fill 2023-02-02 11:28:20 -08:00
Grant Sanderson
4ec2e8b0c5 Merge branch 'master' of github.com:3b1b/manim into video-work 2023-02-02 11:22:58 -08:00
Grant Sanderson
260815c675 Merge pull request #1984 from 3b1b/safer-self
Use typing_extensions to import Self for python versions <3.11
2023-02-02 11:22:33 -08:00
Grant Sanderson
ab6a7df4af Use typing_extensions to import Self for python versions <3.11 2023-02-02 10:54:47 -08:00
Grant Sanderson
17cef427f1 Update fill shader alpha blending, and simplify the fill canvas 2023-02-02 10:42:24 -08:00
Grant Sanderson
b499caaa45 Have SVG subdivide intersections if winding fill is not a default 2023-02-02 10:40:09 -08:00
Grant Sanderson
9c03a40d68 Account for unnecessary calls to use_winding_fill 2023-02-02 10:39:30 -08:00
Grant Sanderson
47672d3b1e Add checks for setting submobjects with existing list 2023-02-01 22:52:59 -08:00
Grant Sanderson
eeadbe4542 Small reshuffling 2023-02-01 22:52:02 -08:00
Grant Sanderson
8adf2a6e07 Partition render groups based on shader type, fixed_in_frame status, depth_test and whether the mobject is changing 2023-02-01 20:39:16 -08:00
Grant Sanderson
6eafdc63cc Merge branch 'video-work' into render-groups 2023-02-01 20:17:01 -08:00
Grant Sanderson
ebf2ee5849 Update tex patterns 2023-02-01 20:12:06 -08:00
Grant Sanderson
f4a6f99b54 Check _use_winding_fill on the submobject level 2023-02-01 20:11:50 -08:00
Grant Sanderson
8820af65ec Check that scene has a camera frame in pixel_to_point_coords 2023-02-01 20:11:31 -08:00
Grant Sanderson
f83c441210 Make it so that copying a mobject will copy its name, if applicable 2023-02-01 13:35:46 -08:00
Grant Sanderson
f293ccdff4 Add copy_frame_anim_call 2023-02-01 13:35:10 -08:00
Grant Sanderson
40bcb7e0f3 Accept list of Vect3 as an input to Mobject.set_points 2023-02-01 13:02:56 -08:00
Grant Sanderson
979589a156 Change clicking behavior in InteractiveScene 2023-02-01 13:02:34 -08:00
Grant Sanderson
9ef14c7260 Change default h_buff on Matrix 2023-02-01 11:38:54 -08:00
Grant Sanderson
c062592684 Draw border width behind fill 2023-02-01 11:36:54 -08:00
Grant Sanderson
c8b65d5621 Merge pull request #1982 from 3b1b/video-work
Various bug fixes and tweaks
2023-02-01 11:28:42 -08:00
Grant Sanderson
e76c64ad52 Merge branch 'master' into video-work 2023-02-01 11:28:27 -08:00
Grant Sanderson
5527c0706d Merge pull request #1981 from 3b1b/add-self-type
Add Self type
2023-02-01 11:27:00 -08:00
Grant Sanderson
280090a7c9 Small reorganization to VMobject.get_shader_wrapper_list, and default to fill border being drawn up front 2023-02-01 11:24:46 -08:00
Grant Sanderson
b351c9f1c8 Add smaller h_buff to matrix in OpeningManimExample 2023-02-01 11:20:42 -08:00
Grant Sanderson
04733ac32e Default to fully opaque background rectangle 2023-02-01 11:20:09 -08:00
Grant Sanderson
0c9afb65d9 Small clean up to render calls 2023-02-01 11:19:40 -08:00
Grant Sanderson
b1fb3e1d54 Add render mode and early discard for fill canvas vao 2023-02-01 11:19:22 -08:00
Grant Sanderson
7c087838a3 Change backstroke defaults in OpeningScene 2023-01-31 21:33:36 -08:00
Grant Sanderson
bc38165d44 Allow for matched_pairs arg to TransformMatchingStrings 2023-01-31 20:16:20 -08:00
Grant Sanderson
c8d1ee5c88 No longer any need for specialized invisible_copy 2023-01-31 20:16:05 -08:00
Grant Sanderson
f858a439dd Make alignment between VMobjects conducive to smoother interpolation 2023-01-31 20:15:48 -08:00
Grant Sanderson
d3a4d81a63 Remove commended code 2023-01-31 16:08:43 -08:00
Grant Sanderson
fca5770b9f Fix Camera.blit 2023-01-31 16:06:53 -08:00
Grant Sanderson
d9c85aac46 Add dict_eq 2023-01-31 15:37:30 -08:00
Grant Sanderson
93e65fa3e7 Prevent needless extra copying in Mobject.copy 2023-01-31 15:37:23 -08:00
Grant Sanderson
3b0c958189 Check case of scale = 0 in get_view_matrix 2023-01-31 15:37:03 -08:00
Grant Sanderson
f42b3bfa3e In UpdatersExample, use Tex.make_number_changable 2023-01-31 14:49:07 -08:00
Grant Sanderson
077f264890 In Mobject.become, match needs_new_bounding_box status 2023-01-31 14:48:26 -08:00
Grant Sanderson
7e78e76966 Only call become at the end of Transform if the rate func ends at 1 2023-01-31 14:46:28 -08:00
Grant Sanderson
1e46847a69 Use Iterator type for Mobject.__iter__ 2023-01-31 14:32:32 -08:00
Grant Sanderson
4c327cd5d2 Merge branch 'add-self-type' into video-work 2023-01-31 14:26:31 -08:00
Grant Sanderson
3e308d881f Merge branch 'master' of github.com:3b1b/manim into video-work 2023-01-31 14:24:45 -08:00
Grant Sanderson
8e8229b9b8 Merge pull request #1980 from 3b1b/glitch-fix
Change VMobject rendering mode to TRIANGLES
2023-01-31 14:24:08 -08:00
Grant Sanderson
9dc6cce09f Merge branch 'master' into glitch-fix 2023-01-31 14:23:57 -08:00
Grant Sanderson
e8302e6025 Merge pull request #1978 from 3b1b/type-error-fix
Possible fix for a type error
2023-01-31 14:22:15 -08:00
Grant Sanderson
015a7487e7 Remove stray import 2023-01-31 14:20:40 -08:00
Grant Sanderson
468fdf9003 Add Self type to value_tracker.py 2023-01-31 14:19:58 -08:00
Grant Sanderson
031adda503 Small fixes to three_dimensions.py 2023-01-31 14:19:24 -08:00
Grant Sanderson
0452012d54 Add Self type to shape_matchers.py 2023-01-31 14:18:02 -08:00
Grant Sanderson
576d8c996b Add Self type to numbers.py 2023-01-31 14:16:15 -08:00
Grant Sanderson
74a11bb05c Add Self type to matrix.py 2023-01-31 14:13:47 -08:00
Grant Sanderson
6a42ef846a Add Self type to geometry.py 2023-01-31 14:12:41 -08:00
Grant Sanderson
da6875ca55 Add Self type to coordinate_systems.py 2023-01-31 14:08:22 -08:00
Grant Sanderson
d8c21ff7aa Add Self type to changing.py 2023-01-31 14:08:12 -08:00
Grant Sanderson
af585ca3a1 Add Self type to dot_cloud.py and point_cloud_mobject.py 2023-01-31 13:49:48 -08:00
Grant Sanderson
3779577d9f Add Self type to surface.py 2023-01-31 13:47:25 -08:00
Grant Sanderson
b58224f6c8 Add Self type to vectorized_mobject.py 2023-01-31 13:43:54 -08:00
Grant Sanderson
50343e9629 Add Self type to mobject.py 2023-01-31 13:31:48 -08:00
Grant Sanderson
a4d9b101de Whoops, make sure deepcopy actually returns 2023-01-31 12:53:25 -08:00
Grant Sanderson
60aae748a7 Make sure animations will trigger a refresh for joint products 2023-01-31 12:49:02 -08:00
Grant Sanderson
92e4d43ca3 Make sure camera location is not computed more times than it needs to be 2023-01-31 12:29:49 -08:00
Grant Sanderson
424db4b3e4 Ensure view matrix is not computed more than it needs to be 2023-01-31 12:20:25 -08:00
Grant Sanderson
2d0bdfbdb6 Merge branch 'glitch-fix' into video-work 2023-01-31 11:59:54 -08:00
Grant Sanderson
9e5fca6750 Merge branch 'type-error-fix' into video-work 2023-01-31 11:58:09 -08:00
Grant Sanderson
2cbad30f45 Change VMobject rendering mode to TRIANGLES
And set indices appropriately when reading in to the ShaderWrapper
2023-01-31 11:45:53 -08:00
Grant Sanderson
5952f9ea74 Make sure rgbas will be resized if bigger than Mobject.data 2023-01-31 09:48:23 -08:00
Grant Sanderson
f2d71e6521 Don't rotate Laptop into place 2023-01-31 09:20:05 -08:00
Grant Sanderson
0645912765 Merge pull request #1979 from 3b1b/video-work
Various bug fixes
2023-01-31 09:11:43 -08:00
Grant Sanderson
57deab6617 Fix ControlsExample 2023-01-31 09:08:38 -08:00
Grant Sanderson
f8cfcfbc64 Fix EventListener typo 2023-01-31 09:08:24 -08:00
Grant Sanderson
76ee97adfa Possible fix for a type error 2023-01-31 08:48:57 -08:00
Grant Sanderson
e7734ca84c Fix TexturedSurface 2023-01-30 20:57:21 -08:00
Grant Sanderson
5ff44f5850 Divide by epsilon prior to normalizing 2023-01-30 20:51:04 -08:00
Grant Sanderson
a58327657c Provide an epsilon of room to Sphere at poles 2023-01-30 20:50:42 -08:00
Grant Sanderson
55da5d5d03 Remove use of dv_points and du_points, pass unit normals to shader instead 2023-01-30 20:49:32 -08:00
Grant Sanderson
c469c6b009 Prevent NumberPlane from double drawing axes 2023-01-30 20:38:23 -08:00
Grant Sanderson
9017df847d Add Camera.blit, and use it when there's a window, but the used fbo is not the window's 2023-01-30 20:38:13 -08:00
Grant Sanderson
33116f8af1 Remove stray import 2023-01-30 20:37:27 -08:00
Grant Sanderson
0de914fd01 No need for du_points, and dv_points in SurfaceMesh 2023-01-30 20:37:15 -08:00
Grant Sanderson
e950286fa4 Replace get_gl_Position -> emit_gl_Position 2023-01-30 18:43:28 -08:00
Grant Sanderson
5490b3be19 Merge pull request #1977 from 3b1b/video-work
Various clean ups associated with 3d scenes
2023-01-30 16:27:53 -08:00
Grant Sanderson
215c21babf Small renaming 2023-01-30 15:24:10 -08:00
Grant Sanderson
7e00660e47 Whoops, re-instate pre_render 2023-01-30 15:16:08 -08:00
Grant Sanderson
daaaba0a67 Use frame_scale uniform instead of frame_shape 2023-01-30 15:10:41 -08:00
Grant Sanderson
9628adc957 Ensure scroll zooming works better in 3d 2023-01-30 15:03:05 -08:00
Grant Sanderson
af69cf9c7d Track field of view instead of focal_dist_to_height 2023-01-30 15:02:33 -08:00
Grant Sanderson
71bd3edb09 Fix frame scaling 2023-01-30 15:02:04 -08:00
Grant Sanderson
277c471c90 Refactor so that view matrix incorporates frame scaling 2023-01-30 14:15:39 -08:00
Grant Sanderson
b85c3bd478 Remove stray import 2023-01-30 11:57:09 -08:00
Grant Sanderson
285953b44d Add FRAME_SHAPE constant 2023-01-30 11:57:01 -08:00
Grant Sanderson
15d8ebb572 Add Mobject.set_shape 2023-01-30 11:53:15 -08:00
Grant Sanderson
abdcb64461 Fix panning for off-center frame 2023-01-28 23:05:52 -08:00
Grant Sanderson
e58aea9e2f Change to a default where scrolling zooms, and dragging pans 2023-01-28 22:59:54 -08:00
Grant Sanderson
2705ba3afa Fix CameraFrame.to_fixed_frame_point 2023-01-28 22:58:05 -08:00
Grant Sanderson
901d40ba11 Fix scroll zooming 2023-01-28 22:53:56 -08:00
Grant Sanderson
0d9bb71d3c Increase scroll sensitivity 2023-01-28 22:42:33 -08:00
Grant Sanderson
0fe5922253 Clean up scrolling 2023-01-28 22:40:57 -08:00
Grant Sanderson
09900456f7 Clean up pixel_coords_to_space_coords to work better in 3d 2023-01-28 22:30:46 -08:00
Grant Sanderson
91f69be3e0 Add CameraFrame.to_fixed_frame_point 2023-01-28 22:30:00 -08:00
Grant Sanderson
da9610b9f9 Remove redundancy 2023-01-28 17:54:00 -08:00
Grant Sanderson
b3dec3fd51 Small fixes 2023-01-28 17:53:49 -08:00
Grant Sanderson
68255b1c9a Remove references to no-longer-need path_string_config 2023-01-28 17:53:40 -08:00
Grant Sanderson
28c4921a1a Specify ctx type 2023-01-28 15:40:58 -08:00
Grant Sanderson
0d36f17f9c Remove unused line 2023-01-28 15:40:10 -08:00
Grant Sanderson
c08e111911 Default to applying depth test for non-fixed objects added to a 3d scene 2023-01-28 15:02:00 -08:00
Grant Sanderson
368f48f8dd Make use of some glsl built-ins 2023-01-28 15:01:32 -08:00
Grant Sanderson
474a6c27e3 Counteract alpha scaling from fill frag 2023-01-28 15:00:15 -08:00
Grant Sanderson
31b937a7f1 Remove no-longer necessary PathString configuration 2023-01-28 13:19:06 -08:00
Grant Sanderson
c6db74c996 Re-order conditional blocks 2023-01-28 13:06:23 -08:00
Grant Sanderson
fbde9e8bba Check for null orientation in getting euler angles 2023-01-28 13:06:08 -08:00
Grant Sanderson
8d72340501 Remove some references to triangulation 2023-01-28 12:43:56 -08:00
Grant Sanderson
144e512952 Use active camera config, not default 2023-01-28 12:19:49 -08:00
Grant Sanderson
dec5089777 Update SurfaceExample to use ThreeDScene 2023-01-28 12:04:15 -08:00
Grant Sanderson
5deef1c249 Allow for setting a default frame orientation 2023-01-28 12:02:19 -08:00
Grant Sanderson
a1449def95 Move SampleSpaceScene to videos repo 2023-01-28 11:45:31 -08:00
Grant Sanderson
2a3f927566 Set defaults so that VMobjects will have no antialias width when depth test is turned on 2023-01-28 11:39:31 -08:00
Grant Sanderson
c7ef4eefbc Add getter/setter for anti_alias_width 2023-01-28 11:35:26 -08:00
Grant Sanderson
ab03a0cfba Add Mobject.set_uniform 2023-01-28 11:35:15 -08:00
Grant Sanderson
05a80f53a7 Make sure depth test calls map to the whole family 2023-01-28 10:37:34 -08:00
Grant Sanderson
60a27f52f1 Add depth sampling for fill 2023-01-28 10:36:41 -08:00
Grant Sanderson
1a62314719 Add a "clear" option for Mobjects
This not only sets the submobject list to 0, but removes self from the parent lists
2023-01-28 10:11:22 -08:00
Grant Sanderson
8a18967ea4 Initial implementation of render groups in Scene 2023-01-28 10:11:10 -08:00
Grant Sanderson
fc379dab18 Add a "clear" option for Mobjects
This not only sets the submobject list to 0, but removes self from the parent lists
2023-01-28 10:10:51 -08:00
Grant Sanderson
f296dd8df5 Merge pull request #1974 from 3b1b/video-work
Miscellaneous bug fixes
2023-01-27 19:28:40 -08:00
Grant Sanderson
047128a663 Make sure shader_wrapper inherits depth test 2023-01-27 19:27:42 -08:00
Grant Sanderson
38abef8871 Fix ShaderWrapper.init_textures 2023-01-27 19:27:23 -08:00
Grant Sanderson
8ecfc2b2cf add shaders to universal imports 2023-01-27 17:08:22 -08:00
Grant Sanderson
ce5d0b61f9 Add back accidentally deleted reverse_points code 2023-01-27 16:58:22 -08:00
Grant Sanderson
71ef39ea5b Remove "poor man's anti-aliasing" for Fill and instead render a small border width for fill 2023-01-27 16:15:20 -08:00
Grant Sanderson
3a01eb31bd Remove group_type arg 2023-01-27 16:02:47 -08:00
Grant Sanderson
d5b1a1725d Allow Mobject.remove to remove any family member, not just immediate submobjects 2023-01-27 15:15:16 -08:00
Grant Sanderson
1f6363821b Have VMobject inherit children uniforms when rendering 2023-01-27 14:48:57 -08:00
Grant Sanderson
35c19fe8a7 Edit is_fixed_in_frame 2023-01-27 14:48:31 -08:00
Grant Sanderson
e57ca4e1ee Track orientation for non-winding fill 2023-01-27 12:43:21 -08:00
Grant Sanderson
86fb69c5bb Track unit normal for fill 2023-01-27 12:35:43 -08:00
Grant Sanderson
1c432dd6dc Small refactor to stroke geom shader 2023-01-27 10:48:06 -08:00
Grant Sanderson
3a0916fe3a Reorganize fbo initialization 2023-01-27 10:12:53 -08:00
Grant Sanderson
40ae481979 Marginally better vbo/ibo tracking 2023-01-27 10:01:37 -08:00
Grant Sanderson
97e4c25453 Add comment 2023-01-27 08:29:41 -08:00
Grant Sanderson
1707958e0f Clean up fill shader a bit 2023-01-27 08:26:54 -08:00
Grant Sanderson
746b52cda5 Okay, actually fix Arrow 2023-01-26 23:51:05 -08:00
Grant Sanderson
86fb1d82f5 Typo fix 2023-01-26 23:44:33 -08:00
Grant Sanderson
de7545e5fa Tiny tweak to array_is_constant 2023-01-26 23:43:34 -08:00
Grant Sanderson
b21e470e69 In append_vectorized_mobject, append data as well as points 2023-01-26 23:43:21 -08:00
Grant Sanderson
79039bde61 Fix Arrow 2023-01-26 23:42:03 -08:00
Grant Sanderson
2863672740 Small clean up 2023-01-26 23:05:09 -08:00
Grant Sanderson
422c9cebd2 Only trigger triangulation for non-winding fill 2023-01-26 23:05:01 -08:00
Grant Sanderson
6388647860 Change to using glBlendFuncSeparate
To please type checkers
2023-01-26 22:51:14 -08:00
Grant Sanderson
eab8edd51d Remove needless list(...) 2023-01-26 22:41:36 -08:00
Grant Sanderson
8f6c14ad5f Increase threshold for discarding fill fragments 2023-01-26 22:41:23 -08:00
Grant Sanderson
7a59cc2f03 Use gl.MAX to blend alphas in fill 2023-01-26 22:40:29 -08:00
Grant Sanderson
0f89349bb8 Small clean up 2023-01-26 21:00:20 -08:00
Grant Sanderson
ab57b0acf0 Ensure positive orientation on all SVG, not just PathStrings 2023-01-26 21:00:07 -08:00
Grant Sanderson
1bd6a77151 Don't use @stash_mobject_pointers on copy, be more explicit 2023-01-26 20:59:36 -08:00
Grant Sanderson
bf2a609246 Have animation group collect parts as a VGroup if it can 2023-01-26 20:39:05 -08:00
Grant Sanderson
e9333a908c Move camera.clear call into 'capture' 2023-01-26 20:38:38 -08:00
Grant Sanderson
5803a00598 Use smaller fill_texture, adjusting winding-fill blending hack as is necessary 2023-01-26 20:14:22 -08:00
Grant Sanderson
9ee9e1946a Use non-window fbo in scene.get_image 2023-01-26 20:02:50 -08:00
Grant Sanderson
3a175c1a4c Note that sorting surface indices affects data 2023-01-26 20:02:28 -08:00
Grant Sanderson
258bc2256a Provide a check that shader uniforms really need updating before setting value 2023-01-26 20:01:59 -08:00
Grant Sanderson
adfef48418 Merge pull request #1973 from 3b1b/video-work
Refactor render out of camera (plus winding fill blending fix)
2023-01-26 16:54:44 -08:00
Grant Sanderson
acdc2654d3 Account for 'target_mobject is None' case 2023-01-26 16:52:25 -08:00
Grant Sanderson
9696827213 Allow for adding null subpath 2023-01-26 16:50:22 -08:00
Grant Sanderson
6d4782506a Account for null fill cases in invinisble_copy 2023-01-26 16:49:36 -08:00
Grant Sanderson
28c875c2c3 Finish Transforms with a call to Mobject.become 2023-01-26 16:49:13 -08:00
Grant Sanderson
164c9ba754 Use copy in set_data 2023-01-26 16:46:05 -08:00
Grant Sanderson
8ef71bb930 Don't use 'become' for interpolate at alpha = 0 or 1 2023-01-26 16:43:40 -08:00
Grant Sanderson
a8da171adb Make sure a group inherits the fixed_in_frame status of its parts 2023-01-26 15:58:56 -08:00
Grant Sanderson
65afed1bd1 Move shading from fill geom to fill frag shader 2023-01-26 15:50:27 -08:00
Grant Sanderson
14cda7e908 Don't show progress bar in embed by default 2023-01-26 15:28:10 -08:00
Grant Sanderson
37f0bf8c11 Fix winding fill blending
(Using somewhat of a hack)
2023-01-26 15:27:48 -08:00
Grant Sanderson
3f5df432ce Consider winding_fill alphas pre-multiplied 2023-01-26 12:17:21 -08:00
Grant Sanderson
a33b24310e Fix non-winding-fill orientation 2023-01-26 12:15:30 -08:00
Grant Sanderson
c6c23a1fe7 Unnecessary refresh_bounding_box 2023-01-26 12:06:13 -08:00
Grant Sanderson
f5cb2bfa52 Check for mismatched keys in uniform interpolation 2023-01-26 12:06:05 -08:00
Grant Sanderson
05dd399270 Ensure svgs have positive orientation by default 2023-01-26 12:04:58 -08:00
Grant Sanderson
72590a8fef Note that using winding fill changes data 2023-01-26 12:04:34 -08:00
Grant Sanderson
a1595a9e2f Use separate fbo for writing to file when window is active 2023-01-25 22:34:11 -08:00
Grant Sanderson
a68bc1271b Have FillShaders all share the same texture used for intermediary rendering 2023-01-25 19:43:16 -08:00
Grant Sanderson
cb36fda6d7 In interpolate, only update data status if some keys are unlocked 2023-01-25 19:24:19 -08:00
Grant Sanderson
88590e5a05 Remove serializing deepcopy 2023-01-25 19:23:55 -08:00
Grant Sanderson
a601384211 Remove stray imports 2023-01-25 19:23:22 -08:00
Grant Sanderson
f96a697ee3 Use become for interpolating at 0 or 1 2023-01-25 19:21:24 -08:00
Grant Sanderson
3c8e3792e7 Remove references to refresh_static_mobjects 2023-01-25 19:20:11 -08:00
Grant Sanderson
2beb55727f Change naming logic for recorded inserts 2023-01-25 17:30:12 -08:00
Grant Sanderson
7609b1db78 Set up by-hand anti-aliasing for FillShaderWrapper 2023-01-25 17:19:44 -08:00
Grant Sanderson
018b07212f Change how joint_products are updated in pointwise_become_partial 2023-01-25 16:50:52 -08:00
Grant Sanderson
d2af6a5f4b Keep track of when Mobject data has changed, and used that to determine when ShaderWrapper generates new buffers 2023-01-25 16:43:47 -08:00
Grant Sanderson
4dfabc1c28 Make sure FillShaderWrapper works without a window 2023-01-25 14:20:36 -08:00
Grant Sanderson
424707d035 Move rendering more fully away from Camera to Mobject and ShaderWrapper 2023-01-25 14:13:56 -08:00
Grant Sanderson
2c737ed540 Move most of rendering logic to ShaderWrapper 2023-01-25 13:45:18 -08:00
Grant Sanderson
c94d8fd3b0 Move Texture handling and vao creation outside of Camera 2023-01-25 12:10:39 -08:00
Grant Sanderson
3299741359 Move program code to ShaderWrapper, away from Camera 2023-01-25 11:23:31 -08:00
Grant Sanderson
10047773f7 Have ShaderWrapper track OpenGL context 2023-01-25 10:49:30 -08:00
Grant Sanderson
16d773f1b3 Remove refresh_shader_data 2023-01-25 10:48:59 -08:00
Grant Sanderson
80729c0cb8 Only initialize ShaderWrappers as needed 2023-01-25 10:37:12 -08:00
Grant Sanderson
8c1e5f3b42 Change use_clip_plane to be a function 2023-01-25 10:31:05 -08:00
Grant Sanderson
3339aad29e Separate CameraFrame into its own file 2023-01-25 10:19:44 -08:00
Grant Sanderson
a9a3ca08cd Merge pull request #1972 from 3b1b/winding-fill
Winding fill
2023-01-25 10:01:31 -08:00
Grant Sanderson
bc5c78de83 Add winding fill to VMobject args 2023-01-25 09:56:07 -08:00
Grant Sanderson
0ea91f22b2 Merge pull request #1971 from 3b1b/video-work
Video work
2023-01-25 09:54:55 -08:00
Grant Sanderson
7deaf4cb11 Small clean up 2023-01-25 09:51:27 -08:00
Grant Sanderson
93dd9f687b Ensure align_family works well with VMobject fill 2023-01-25 09:50:16 -08:00
Grant Sanderson
4cb9c9c2fc Remove unnecessary normalize 2023-01-25 08:18:10 -08:00
Grant Sanderson
6cf8c8d2e8 Do refresh in pointwise_become_partial 2023-01-24 21:47:12 -08:00
Grant Sanderson
272925fa19 Change winding fill blend_func 2023-01-24 21:46:52 -08:00
Grant Sanderson
0e2d21bed3 Don't necessarily use VGroup with FadeTransform 2023-01-24 21:46:34 -08:00
Grant Sanderson
346d252451 Don't save triangulation, but do orient svg paths positively 2023-01-24 21:33:00 -08:00
Grant Sanderson
088a2f65a3 Misc. clean up 2023-01-24 21:10:57 -08:00
Grant Sanderson
307487e087 Don't pre-normalize joint_products 2023-01-24 21:10:26 -08:00
Grant Sanderson
98eccab977 Ensure background rectangle matches orientation 2023-01-24 20:03:33 -08:00
Grant Sanderson
f0df5c759d Make winding fill optional, and make winding additive rather than toggling 2023-01-24 20:03:23 -08:00
Grant Sanderson
e9c70dbfd9 Ensure vert_indices are always of type int 2023-01-24 16:58:47 -08:00
Grant Sanderson
72da9786a3 Use null array for vert indices in place of None 2023-01-24 15:53:43 -08:00
Grant Sanderson
516fe9155e Small tweaks 2023-01-24 15:29:35 -08:00
Grant Sanderson
b93e284695 In aligning families, scale inserted submobjects to 0 2023-01-24 15:29:09 -08:00
Grant Sanderson
88ed1a2fdb Have init_fill_fbo take in ctx as an argument 2023-01-24 15:28:09 -08:00
Grant Sanderson
945aa9713f Fix aligned subpaths bug 2023-01-24 15:02:06 -08:00
Grant Sanderson
aa6c321a0a Change InteractiveScene dot config 2023-01-24 14:25:02 -08:00
Grant Sanderson
87afdac6a4 Small clean up 2023-01-24 14:09:41 -08:00
Grant Sanderson
6e56c31d67 Use gl_InstanceID instead of hacking triangle_strip 2023-01-24 13:49:43 -08:00
Grant Sanderson
4774d2bc3b First pass at a winding-based fill approach 2023-01-24 13:29:34 -08:00
Grant Sanderson
d01658bc5b Fix multi-color setting 2023-01-24 13:04:13 -08:00
Grant Sanderson
97789fff35 Swap buffers when resetting to default position 2023-01-24 12:05:39 -08:00
Grant Sanderson
b1f0270316 Change threshold for bevel reduction 2023-01-24 12:05:25 -08:00
Grant Sanderson
b99b88fd25 Update Scene.get_image to resize window if needed 2023-01-24 12:05:08 -08:00
Grant Sanderson
1dda706335 Small cleanup 2023-01-24 12:04:43 -08:00
Grant Sanderson
8a6deb4068 Enable recording during a Scene embed 2023-01-23 17:10:18 -08:00
Grant Sanderson
e2421a650c Don't disable clip plane 2023-01-23 17:06:49 -08:00
Grant Sanderson
b0cca9e4b6 Camera pixel_shape should reflect the drawn fbo 2023-01-23 17:04:44 -08:00
Grant Sanderson
c13495deeb Blit based on window's viewport, when in preview mode 2023-01-23 17:03:46 -08:00
Grant Sanderson
03080a10a7 Small style tweaks 2023-01-23 15:05:10 -08:00
Grant Sanderson
8d729eef5a Rename perspective to view_matrix 2023-01-23 14:41:17 -08:00
Grant Sanderson
e8b75941e0 Get rid of pixel_width and pixel_height attrs on Camera 2023-01-23 14:02:06 -08:00
Grant Sanderson
1d4fcf020b Refer directly to fbo viewports in get_raw_fbo_data 2023-01-23 11:54:01 -08:00
Grant Sanderson
8ce5dc7e84 Add DieFace to drawings.py 2023-01-23 11:53:30 -08:00
Benjamin Bastian
b934ee5f50 Make isinstance check work for python 3.7-3.9 (#1969) 2023-01-23 11:36:51 +08:00
Grant Sanderson
ba1b43df1a Merge pull request #1967 from 3b1b/video-work
Miscellaneous fixes
2023-01-22 09:48:50 -08:00
Grant Sanderson
847c27ad23 Remove stray import 2023-01-22 09:45:50 -08:00
Grant Sanderson
8b786311af Rename set_ctx_clip_distance -> set_ctx_clip_plane 2023-01-22 09:45:41 -08:00
Grant Sanderson
39cda62b66 Remove texture_id == 15 hack 2023-01-22 09:07:26 -08:00
Grant Sanderson
24864a3d61 Small tweak 2023-01-21 11:13:22 -08:00
Grant Sanderson
9e02796c9a Fix set_width for variable stroke width 2023-01-20 21:38:48 -08:00
Grant Sanderson
8e1fdd5a79 Change crosshair style 2023-01-20 21:38:36 -08:00
Grant Sanderson
0d66981ac7 Fix issue with variable stroke width 2023-01-20 21:38:28 -08:00
Grant Sanderson
2e2e8dfee2 Fix the fact that Write messes up joint_products 2023-01-20 20:33:47 -08:00
Grant Sanderson
917481cb23 Always refresh in pointwise_become_partial 2023-01-20 20:33:23 -08:00
Grant Sanderson
8fee4d1a66 Fix straight line fill anti-alias issue 2023-01-20 17:35:36 -08:00
Grant Sanderson
f2d4313bcf Update SurfaceExample to specify samples at scene level 2023-01-20 17:05:59 -08:00
Grant Sanderson
d08a16a5fb Make Camera.fbo the entity rendered to, with a separate fbo for emitted frames 2023-01-20 16:31:09 -08:00
Grant Sanderson
66d12a1687 Specify number of samples at the scene level, and be sure it works for Window as well 2023-01-20 16:30:39 -08:00
Grant Sanderson
9249433144 Don't pass uv_func from SGroup 2023-01-20 16:26:06 -08:00
Grant Sanderson
23b4e3e03b Use cubic formula in stroke frag for large stroke width case 2023-01-20 13:22:18 -08:00
Grant Sanderson
6c262f63b1 Reduce is_linear threshold 2023-01-20 10:10:39 -08:00
Grant Sanderson
b7ea24f9ea Tweak stroke frag 2023-01-20 10:09:58 -08:00
Grant Sanderson
7df6efb55f Handle edge case of false endpoints in make_smooth 2023-01-20 10:08:12 -08:00
Grant Sanderson
fe7dc3c459 Tiny cleanup 2023-01-20 10:07:28 -08:00
Grant Sanderson
2290f810ca Small tweaks to number_to_point 2023-01-19 20:25:29 -08:00
Grant Sanderson
debc68a3b4 Just moving some lines around 2023-01-19 20:24:59 -08:00
Grant Sanderson
909e515a2f Only compute xyz-to-uv matrix in non-linear case 2023-01-19 20:24:32 -08:00
Grant Sanderson
1c2ec03f7d Replace VMobject.make_approximately_smooth with VMobject.make_smooth(approx=True) 2023-01-19 11:34:13 -08:00
Grant Sanderson
6839de9a31 Remove rotate.glsl 2023-01-19 10:52:53 -08:00
Grant Sanderson
c873d073e2 Factor out rotation matrix 2023-01-19 10:47:21 -08:00
Grant Sanderson
1eae7c06ba Add conditions for resize_with_interpolation 2023-01-19 09:56:40 -08:00
Grant Sanderson
dbeef42600 In VMobject.set_stroke, Don't use resize_with_interpolation for non-list args 2023-01-19 09:56:26 -08:00
Grant Sanderson
93f3c6535f Have DecimalMobject save pre-generated characters 2023-01-19 09:55:56 -08:00
Grant Sanderson
763967281f Don't use resize_with_interpolation by default 2023-01-19 09:51:19 -08:00
Grant Sanderson
1367e31439 Fix bug with polygon start angle = 0 2023-01-19 09:50:41 -08:00
Grant Sanderson
e6abff4299 Speed up bind_graph_to_func 2023-01-19 09:50:24 -08:00
Grant Sanderson
148898f983 Fix insert_n_curves 2023-01-18 23:43:51 -08:00
Grant Sanderson
981fe009e5 Fix radius on dots 2023-01-18 23:43:36 -08:00
Grant Sanderson
22d2819ecf Improvements to make_smooth 2023-01-18 22:39:02 -08:00
Grant Sanderson
781e0a9805 Merge pull request #1966 from 3b1b/video-work
Various render improvements
2023-01-18 16:26:06 -08:00
Grant Sanderson
3820e098c0 Tweak to type hints 2023-01-18 16:25:32 -08:00
Grant Sanderson
8e2cf04b71 Simplify true_dot shaders 2023-01-18 15:36:00 -08:00
Grant Sanderson
cd3c5031fa Fix get_perspective_transform to shift before rotation 2023-01-18 13:59:50 -08:00
Grant Sanderson
6c2544098b Store pixel_size instead of pixel_shape 2023-01-18 13:50:09 -08:00
Grant Sanderson
b667d89e9b Simplify get_gl_Position 2023-01-18 13:44:41 -08:00
Grant Sanderson
fa525b494c Increase threshold for bevel tweaking 2023-01-18 13:07:37 -08:00
Grant Sanderson
13c41be17f Small clean up 2023-01-18 13:07:18 -08:00
Grant Sanderson
e20efda3df Revert away from using curve_to_quadratic 2023-01-18 13:03:23 -08:00
Grant Sanderson
8b3aa8f5c6 Account for edge cases on curve_to_quadratic 2023-01-18 12:52:47 -08:00
Grant Sanderson
d39fea0d4d A few small fixes 2023-01-18 12:52:05 -08:00
Grant Sanderson
96b0ec9094 Use fontTools.cu2qu.cu2qu import curve_to_quadratic 2023-01-18 12:29:25 -08:00
Grant Sanderson
40436d6370 Slightly cleaner xs_on_clean_parabola 2023-01-18 11:03:22 -08:00
Grant Sanderson
44e5f15ae9 Default to non-flat stroke for meshes 2023-01-18 10:58:37 -08:00
Grant Sanderson
72e5bde274 Rename xy-to-uv -> xyz-to-uv 2023-01-18 10:58:25 -08:00
Grant Sanderson
1a663943c9 Simpler xyz-to-uv map for linear case 2023-01-18 10:57:14 -08:00
Grant Sanderson
874906bedf Replace 'light_source_position' with 'light_position' 2023-01-18 10:04:51 -08:00
Grant Sanderson
0b72bc5d08 Fix joint normal issue 2023-01-18 10:04:05 -08:00
Grant Sanderson
c7e32e847d Delete no-longer used functions 2023-01-17 17:46:23 -08:00
Grant Sanderson
5e1a02d2ce Use xyz-to-uv matrix for fill 2023-01-17 17:45:25 -08:00
Grant Sanderson
9ed8dd5439 Clean up 2023-01-17 17:39:32 -08:00
Grant Sanderson
b7831ef3f1 Go back to computing xyz-to-uv before repositioning 2023-01-17 17:27:20 -08:00
Grant Sanderson
c2587de691 Apply xyz_to_uv to pre-positioned points 2023-01-17 17:22:00 -08:00
Grant Sanderson
c563ec2036 Simplifications 2023-01-17 17:20:30 -08:00
Grant Sanderson
870e88f8c9 First attempt at finding uv coords from 3d space instead of 2d 2023-01-17 15:46:09 -08:00
Grant Sanderson
7fe84d9263 Don't recompute cross(v01, v12) 2023-01-17 13:18:32 -08:00
Grant Sanderson
1b3bc7a27c For linearity, check cosine of angle instead of angle 2023-01-17 13:16:58 -08:00
Grant Sanderson
b16f0981f6 No need to set flat stroke defaults in Polygon/Polyline 2023-01-17 11:37:06 -08:00
Grant Sanderson
abbe131e8d Track full cross product and dot product of tangent vectors at joints
And alter the convention of what flat_stroke means to be more sensible in 3d
2023-01-17 11:36:47 -08:00
Grant Sanderson
4de0d098ea Allow cross to take an 'out' array 2023-01-17 11:35:50 -08:00
Grant Sanderson
ed2dbfd9b9 Remove unused imports 2023-01-16 21:48:11 -08:00
Grant Sanderson
8d277af47c Go back the convention of positioning stroke vertices in space before geom shader 2023-01-16 21:46:43 -08:00
Grant Sanderson
8ac0aa484b Slight tweak to get_unit_normal 2023-01-16 19:34:37 -08:00
Grant Sanderson
1f613953d6 Don't pre-rotate light source 2023-01-16 19:34:20 -08:00
Grant Sanderson
c3cd64f68c Package reflectiveness, gloss and shadow into a single uniform "shading" 2023-01-16 19:33:57 -08:00
Grant Sanderson
6e6a30c95a Be sure joint_angles are updated immediately before being read into a shader wrapper 2023-01-16 14:28:53 -08:00
Grant Sanderson
20222bc7e9 Update imports 2023-01-16 14:18:49 -08:00
Grant Sanderson
f15ac81131 Pull out helper functions from shader_wrapper.py 2023-01-16 14:18:35 -08:00
Grant Sanderson
7050c7e7b0 Change type for Surface.shader_dtype 2023-01-16 14:11:30 -08:00
Grant Sanderson
161bf7377d Merge pull request #1965 from 3b1b/data-arrays
Data arrays
2023-01-16 14:06:56 -08:00
Grant Sanderson
bd2d45ebc6 Handle edge case of low ring end 2023-01-16 14:00:53 -08:00
Grant Sanderson
dd0e91015c Account for null family case 2023-01-16 13:56:03 -08:00
Grant Sanderson
1a15756330 Make sure Mobject.become works with bounding_box 2023-01-16 13:55:53 -08:00
Grant Sanderson
8ef93b0f9d Treat font_size as a float 2023-01-16 13:43:48 -08:00
Grant Sanderson
a46e580fa4 Make sure resize_preserving_order preserves data type 2023-01-16 13:37:06 -08:00
Grant Sanderson
3b40ccc987 In Mobject.append_points, have most data default to the last value 2023-01-16 13:29:35 -08:00
Grant Sanderson
ae50748717 Default to resizing_preserving_order in set_points 2023-01-16 13:28:09 -08:00
Grant Sanderson
c23f020d9a Add Mobject.const_data_keys so that interpolations can be faster 2023-01-16 13:27:20 -08:00
Grant Sanderson
db45d9e646 Add array_is_constant 2023-01-16 13:26:44 -08:00
Grant Sanderson
f5480d02ff Tidy up ShaderWrapper.read_in 2023-01-16 13:26:34 -08:00
Grant Sanderson
3f8c861973 Rename draw_stroke_behind_fill -> stroke_behind 2023-01-16 11:53:07 -08:00
Grant Sanderson
3a09acd28c Update type hint for ShaderWrapper.uniforms 2023-01-16 11:50:48 -08:00
Grant Sanderson
bdcfbc39ec Cleanup VMobject shader wrapper methods
Deleting those which are no longer needed
2023-01-16 11:50:31 -08:00
Grant Sanderson
74b42a6eb5 Small renaming 2023-01-16 08:59:50 -08:00
Grant Sanderson
5a95bfa70f Delete align_stroke_width_data_to_points 2023-01-15 21:28:19 -08:00
Grant Sanderson
eba86be35b Use resize_preserving_order in aligning VMobjects 2023-01-15 21:23:56 -08:00
Grant Sanderson
2ca8848007 Merge branch 'master' of github.com:3b1b/manim into data-arrays 2023-01-15 21:08:55 -08:00
Grant Sanderson
afbc624ac4 Merge pull request #1964 from 3b1b/video-work
Fix index buffer bug
2023-01-15 21:08:25 -08:00
Grant Sanderson
77a3984683 Fix index buffer bug 2023-01-15 21:06:55 -08:00
Grant Sanderson
29f51a7c6a Check if joint_angles are in locked_data_keys before computing 2023-01-15 20:31:27 -08:00
Grant Sanderson
ba9f61b50b Have ShaderWrapper read in data rather than other shader wrappers 2023-01-15 20:27:19 -08:00
Grant Sanderson
f63331eb24 Use Mobject.data in place of shader_data, remove read_data_into_shader 2023-01-15 20:01:37 -08:00
Grant Sanderson
6f9f83fb1b Unify shader_dtype and data_dtype 2023-01-15 19:09:29 -08:00
Grant Sanderson
3f2fd5b142 Update calculation of path ends to not include adjacent pairs 2023-01-15 18:27:08 -08:00
Grant Sanderson
90ac1fc0bf Rename 'points' -> 'point' 2023-01-15 18:23:41 -08:00
Grant Sanderson
3ba5237f9b Account for edge case with end of loop near end 2023-01-15 18:10:38 -08:00
Grant Sanderson
408890e0d9 Update TexturedSurface for using a data array 2023-01-15 18:02:16 -08:00
Grant Sanderson
9704f063c9 Use pointlike_data_keys for interpolation and rotation 2023-01-15 18:01:37 -08:00
Grant Sanderson
d267c00761 Update Surface to have a data array 2023-01-15 17:40:46 -08:00
Grant Sanderson
ca5e119425 Use _data_defaults for DotCloud radius 2023-01-15 17:40:22 -08:00
Grant Sanderson
7e45558c55 Allow Mobject subclasses to specify which parts of data should act like points 2023-01-15 17:40:05 -08:00
Grant Sanderson
e55434925e Fix get_style for null point case 2023-01-15 16:50:00 -08:00
Grant Sanderson
d868f685dc Account for case of setting stroke width with null array 2023-01-15 16:49:48 -08:00
Grant Sanderson
e37b667c8b Modify Mobject.interpolate 2023-01-15 16:49:24 -08:00
Grant Sanderson
2dafcb3e63 Remove check_data_alignment 2023-01-15 16:48:13 -08:00
Grant Sanderson
801f449ca0 Fix lock_matching_data 2023-01-15 16:46:27 -08:00
Grant Sanderson
f4c50f61b8 Change rgbas -> rgba 2023-01-15 16:46:03 -08:00
Grant Sanderson
2815f60616 First pass at changing data to structure numpy array
This doesn't yet tackle Surface
2023-01-15 16:05:18 -08:00
Grant Sanderson
286b8fb6c3 Set the stage for data to be treated as a structure numpy array 2023-01-15 12:34:59 -08:00
Grant Sanderson
f2e91ef66f Use uniform for ValueTracker value instead of data 2023-01-15 12:34:28 -08:00
Grant Sanderson
da15eb4ad2 Remove a few direct references to data["points"] 2023-01-15 10:00:05 -08:00
Grant Sanderson
ea943de557 Store font size in uniforms not data 2023-01-15 09:50:52 -08:00
Grant Sanderson
8e1b23ee98 Merge pull request #1955 from IcedMonk/yearUpdate
update the year
2023-01-15 09:39:56 -08:00
Grant Sanderson
de38b56d0d Merge pull request #1959 from 3b1b/video-work
Simplify quadratic bezier shaders
2023-01-15 09:39:16 -08:00
Grant Sanderson
51a5086093 Don't default to smoothing for implicit curves 2023-01-15 09:26:56 -08:00
Grant Sanderson
bf726667a8 Don't make TexAndNumbersExample an InteractiveScene by default 2023-01-15 09:26:17 -08:00
Grant Sanderson
4582f5d331 Clean up sort_faces_back_to_front 2023-01-14 16:03:27 -08:00
Grant Sanderson
5b8fb1828f Use ibo for single use render groups 2023-01-14 16:03:16 -08:00
Grant Sanderson
702bb2776c Remove (no-longer needed) filename_to_code_map 2023-01-14 09:41:32 -08:00
Grant Sanderson
c9ba32b568 No need to call tobytes 2023-01-14 08:31:53 -08:00
Grant Sanderson
19a7721661 Fix unit normal issue with bezier fill 2023-01-14 08:00:21 -08:00
Grant Sanderson
c8238f6b39 Consolidate lighting uniforms 2023-01-14 07:57:47 -08:00
Grant Sanderson
d19b244ee1 Move uniform pixel_shape declaration outside of get_gl_Position 2023-01-13 22:11:13 -08:00
Grant Sanderson
a004c88e02 Consolidate functions associated with computing gl_Position 2023-01-13 22:07:28 -08:00
Grant Sanderson
fa81d9f6ea Move comment 2023-01-13 21:43:01 -08:00
Grant Sanderson
3555936c4d Check for valid inputs to arccos 2023-01-13 21:42:54 -08:00
Grant Sanderson
dae51abc17 Allow for a clip plane with Surface 2023-01-13 21:42:34 -08:00
Grant Sanderson
1c1325ff8d More coloring work of Surface to vert shader 2023-01-13 21:04:36 -08:00
Grant Sanderson
28d5baeeff Small stylistic tweaks 2023-01-13 21:04:15 -08:00
Grant Sanderson
51efe0d18e Merge branch 'master' of github.com:3b1b/manim into video-work 2023-01-13 20:42:03 -08:00
Grant Sanderson
12c3af9647 Update to get_subpath_end_indices_from_points 2023-01-13 20:35:54 -08:00
Grant Sanderson
42909a94ac No need for np.repeat in normalize_along_axis 2023-01-13 20:34:18 -08:00
Grant Sanderson
071e7f1a74 Small tweak for get_joint_angles 2023-01-13 20:33:36 -08:00
Grant Sanderson
2aa2eedbbd Calculate unit normal more directly 2023-01-13 17:42:59 -08:00
Grant Sanderson
e534206eb6 Small style change to get_xy_to_uv 2023-01-13 17:37:08 -08:00
Grant Sanderson
394d87effb Small style tweaks to quadratic_bezier_fill/geom 2023-01-13 17:26:59 -08:00
Grant Sanderson
e832bb775f Fix small bug with null triangles 2023-01-13 16:53:22 -08:00
Grant Sanderson
31cc2671e5 Have line_intersects_path not assume closed path 2023-01-13 16:35:18 -08:00
Grant Sanderson
937b894826 Clean up find_intersection 2023-01-13 16:35:01 -08:00
Grant Sanderson
599f74c749 Refresh bounding boxes after selection 2023-01-13 14:59:53 -08:00
Grant Sanderson
91f976f7e9 Don't include bounding box in Mobject.data
In principle, Mobject.data should just carry information that will pass to shaders
2023-01-13 14:58:52 -08:00
Grant Sanderson
cbfe82579f Make sure VMobject.reverse_points works with new path convention 2023-01-13 14:16:04 -08:00
Grant Sanderson
ae99c8cd2e Go back to use_simple_quadratic_approx being set at the Text level 2023-01-13 14:08:29 -08:00
Grant Sanderson
da2b13aee9 Fix triangulation issue for Annulus 2023-01-13 13:22:26 -08:00
Grant Sanderson
a88b56bb04 Be sure get_triangulation is called before orientation data is read in 2023-01-13 13:22:06 -08:00
Grant Sanderson
73a894c136 Set selection animating status after adding mobjects 2023-01-13 13:07:29 -08:00
Grant Sanderson
c820cb4775 Don't propagate animating status to full extended family 2023-01-13 13:06:50 -08:00
Grant Sanderson
69ac946e63 Simpler get_gl_Position 2023-01-13 12:41:09 -08:00
Grant Sanderson
42d612f253 Clean up VMobject.get_joint_angles 2023-01-13 09:57:22 -08:00
Grant Sanderson
440138aac5 Allow for tracking which data keys should always have the same size as points 2023-01-13 09:47:06 -08:00
Grant Sanderson
108bb3da44 Have SVGs default to use_simple_quadratic_approx 2023-01-13 08:16:46 -08:00
Grant Sanderson
10d4db64c8 Merge pull request #1962 from LucaCappelletti94/tqdm_jupyter_notebook
Updated tqdm to support also notebooks
2023-01-13 08:09:14 -08:00
Grant Sanderson
e1abae1d96 Fix typo 2023-01-13 00:24:26 -08:00
Grant Sanderson
c8a77a352f Fix Piano 2023-01-13 00:24:19 -08:00
Grant Sanderson
d2800b6c96 Make sure cross behaves as expected on 2d arrays 2023-01-13 00:05:29 -08:00
Grant Sanderson
c9a2971433 Remove stray constant 2023-01-12 23:58:49 -08:00
Grant Sanderson
a12b5cca67 Add angle check in addition to use_simple_quadratic_approx 2023-01-12 23:58:43 -08:00
Grant Sanderson
aa8fba5b02 Change subdivide_intersections default to one subdivision, remove second check 2023-01-12 23:58:19 -08:00
Grant Sanderson
2c6e8692ce Add condition for calling subdivide_intersections 2023-01-12 23:45:26 -08:00
Grant Sanderson
a44fc2e6d5 Add optional number of subdivision to subdivide_intersections 2023-01-12 23:45:03 -08:00
Grant Sanderson
190b9e4603 Tiny tweak 2023-01-12 21:24:34 -08:00
Grant Sanderson
f39fd92e9e Add condition to account for end of string 2023-01-12 21:24:27 -08:00
Grant Sanderson
f0edc6628b Push default of use_simple_quadratic_approx being True to Text 2023-01-12 21:24:03 -08:00
Grant Sanderson
9f1ab09749 Make usage of simpler quadratic approximations an option for VMobject 2023-01-12 21:06:35 -08:00
Grant Sanderson
a2f3758a7a Add VMobject.subdivide_intersections 2023-01-12 21:05:19 -08:00
Grant Sanderson
de4a56849e Add line_intersects_path 2023-01-12 21:04:46 -08:00
Grant Sanderson
923066db2b Minor style changes to stroke geom shader 2023-01-12 19:54:32 -08:00
Grant Sanderson
de5198196b Fix anti-alias width bug on DotCloud 2023-01-12 19:44:10 -08:00
Grant Sanderson
a47b95044d Add assertions to assure VMobject has a valid number of points 2023-01-12 19:31:08 -08:00
Grant Sanderson
db8b0e7bce Change simple quadratic approximation threshold 2023-01-12 19:24:56 -08:00
Grant Sanderson
dcdf74a715 Clean up stroke geometry shader to better function in 3d 2023-01-12 19:24:42 -08:00
Grant Sanderson
9778c3e085 Remove no-longer necessary correction for path ends 2023-01-12 18:29:44 -08:00
Grant Sanderson
644ea41443 Default to simpler quadratic approximation of cubic beziers 2023-01-12 18:29:19 -08:00
Grant Sanderson
9464f83d18 Track indices for fill shader, but prevent ibo usage at the Camera level 2023-01-12 15:56:44 -08:00
Grant Sanderson
a07701e295 Use triangle strip for stroke shader 2023-01-12 15:56:12 -08:00
Grant Sanderson
24afb2a24f Fix angle_between 2023-01-12 14:43:52 -08:00
Grant Sanderson
c6d3a9646c Merge branch 'reduced-bezier-paths' into video-work 2023-01-12 13:38:55 -08:00
Grant Sanderson
64578df603 Don't save SVG Path data to file
It's more trouble than it's worth
2023-01-12 13:23:48 -08:00
Grant Sanderson
e676bd957b Do inner joint angle computation in geom shader 2023-01-12 13:08:35 -08:00
Grant Sanderson
9320dad45f Have get_subpath_end_indices_from_points ask for exact equality between h and a0 2023-01-12 11:54:25 -08:00
Grant Sanderson
ab30f085b4 Simpler VMobject.get_num_curves 2023-01-12 10:40:18 -08:00
Grant Sanderson
f3e91db581 Small comment change 2023-01-12 10:39:50 -08:00
Grant Sanderson
04fd50491e More consistent corners computation for stroke geom shader 2023-01-12 10:14:14 -08:00
Grant Sanderson
7d90a82317 Fix fill shader vert data 2023-01-12 10:13:42 -08:00
LucaCappelletti94
1708fbd672 Updated tqdm to support also notebooks 2023-01-12 12:03:14 +01:00
Grant Sanderson
1a8e923ef2 Small speed ups 2023-01-12 00:40:27 -08:00
Grant Sanderson
a8fb05a44a Don't use index buffer for fill
It turns out to be strangely slower
2023-01-12 00:23:22 -08:00
Grant Sanderson
c0b3c246de Revert "Revert "Go back to fill shader tracing vertex index manually""
This reverts commit 387de61119.
2023-01-12 00:16:05 -08:00
Grant Sanderson
ae42f6244e Don't use an index buffer for stroke 2023-01-12 00:14:07 -08:00
Grant Sanderson
131e1c2eeb Have corners emitted by stroke geom shader better line up with bezier control points
This is helpful for, say, setting variable stroke width
2023-01-11 21:30:12 -08:00
Grant Sanderson
1f04ba92fb Fix Polygon.round_corners 2023-01-11 20:47:04 -08:00
Grant Sanderson
ed26fdfab8 Have Polyline default to flat stroke 2023-01-11 20:31:38 -08:00
Grant Sanderson
bf84b1933b Remove unnecessary flat stroke specification 2023-01-11 20:31:30 -08:00
Grant Sanderson
5a56a2a5ec Remove bad solution to bevel issue 2023-01-11 20:28:00 -08:00
Grant Sanderson
f04d0ad350 Update add_cubic_bezier_curve 2023-01-11 20:27:37 -08:00
Grant Sanderson
8c435d6181 Default to flat stroke for polygons 2023-01-11 20:27:17 -08:00
Grant Sanderson
31715ec98a Fix Arrow 2023-01-11 20:09:28 -08:00
Grant Sanderson
a17a57825e Fix Annulus and sector 2023-01-11 20:01:54 -08:00
Grant Sanderson
61437b2a7f Remove (no longer used) n_points_per_curve 2023-01-11 19:53:00 -08:00
Grant Sanderson
333db992ed Minor cleanup to Prism 2023-01-11 19:52:45 -08:00
Grant Sanderson
8a08b62f7c Remove n_points_per_curve reference 2023-01-11 19:52:33 -08:00
Grant Sanderson
5d7e923ac6 Remove stray imports 2023-01-11 19:40:21 -08:00
Grant Sanderson
6a18a05a3b Fix arrow for new path behavior 2023-01-11 19:40:15 -08:00
Grant Sanderson
5fac213fee Change crosshair initialization 2023-01-11 19:27:34 -08:00
Grant Sanderson
557e57d95b Change taper width default 2023-01-11 19:27:23 -08:00
Grant Sanderson
d3a40eb1ac Update VShowPassingFlash for new path mode 2023-01-11 16:40:40 -08:00
Grant Sanderson
032a8fd030 Save answer for VMobject.get_outer_vert_indices 2023-01-11 16:25:42 -08:00
Grant Sanderson
387de61119 Revert "Go back to fill shader tracing vertex index manually"
This reverts commit 7847ff1a9d.
2023-01-11 16:22:12 -08:00
Grant Sanderson
5e459d57c6 Revert "Don't use index buffer"
This reverts commit d9dc956137.
2023-01-11 16:21:55 -08:00
Grant Sanderson
d9dc956137 Don't use index buffer
It's strangely longer
2023-01-11 15:59:46 -08:00
Grant Sanderson
7847ff1a9d Go back to fill shader tracing vertex index manually 2023-01-11 15:32:27 -08:00
Grant Sanderson
f2370afea0 Treat stroke indices properly 2023-01-11 15:20:05 -08:00
Grant Sanderson
dba70ceded Clean up Arc init 2023-01-11 14:55:03 -08:00
Grant Sanderson
da125c1072 Add saved outer_vert_indices 2023-01-11 14:42:06 -08:00
Grant Sanderson
c0fba529d9 Update crosshair for new path structure 2023-01-11 14:20:33 -08:00
Grant Sanderson
86b756ab1f No need for subdividing sharp curves 2023-01-11 14:20:20 -08:00
Grant Sanderson
55bc8464b9 Update Arc to make sense with new path structure 2023-01-11 14:19:57 -08:00
Grant Sanderson
21908a48de Change behavior of get_quadratic_approximation_of_cubic to return quintuplets instead of sextuplets 2023-01-11 14:19:33 -08:00
Grant Sanderson
40b9e22b6e Update some type hints in bezier 2023-01-11 14:19:17 -08:00
Grant Sanderson
2808710d60 Add VectNArray 2023-01-11 14:18:57 -08:00
Grant Sanderson
c4e1db7f9d Don't draw paths where the handle equals the first anchor 2023-01-11 14:18:45 -08:00
Grant Sanderson
2a7b787ef6 Test the orientation in the middle of the curve 2023-01-11 14:18:12 -08:00
Grant Sanderson
681fa513a7 First pass at changing VMobject use simpler path strings
Remove the redundancy of treating each quadratic bezier triplet separately, where most ends overlap the next beginning
2023-01-11 14:17:56 -08:00
Grant Sanderson
b967c04c2c Actually ensure get_joint_angle works for start_new_path case 2023-01-10 18:33:49 -08:00
Grant Sanderson
0205a37209 More tiny tweaks for joint_angles 2023-01-10 17:02:12 -08:00
Grant Sanderson
eccaa8681e Ensure get_joint_angles works in start-new-path case 2023-01-10 16:48:08 -08:00
Grant Sanderson
9d9e000c63 Remove stray line 2023-01-10 16:41:12 -08:00
Grant Sanderson
886fd193f0 Use three shader wrappers to account for backstroke 2023-01-10 16:41:03 -08:00
Grant Sanderson
bfaf81c6b3 Refresh shader data at the start of an animation 2023-01-10 16:40:31 -08:00
Grant Sanderson
470e7bee1e Recompute joint angle at the end of align_points 2023-01-10 16:01:52 -08:00
Grant Sanderson
e5b17aad69 Small bug fix for TransformMatchingShape 2023-01-10 16:01:34 -08:00
Grant Sanderson
22420b7724 Ensure joint angles are computed (if need be) during interpolation 2023-01-10 15:32:31 -08:00
Grant Sanderson
e189df81b1 Change default endpoint angle to be 0 2023-01-10 15:32:05 -08:00
Grant Sanderson
0c3367f27b First-pass fix for joints in 3d 2023-01-10 15:17:08 -08:00
Grant Sanderson
131ecce7c4 Add rotate function 2023-01-10 15:16:41 -08:00
Grant Sanderson
7212a98d65 Small clean up 2023-01-10 12:59:10 -08:00
Grant Sanderson
802bd58aa7 Small cleanup 2023-01-10 12:26:16 -08:00
Grant Sanderson
116d6fe244 Revert emit_pentagon to work on 3d vectors 2023-01-10 11:51:05 -08:00
Grant Sanderson
6ec3d9f4a5 Add 'no_joint' to joint types 2023-01-10 11:06:41 -08:00
Grant Sanderson
ab1227a908 Ensure joint angles are up to date in align_points 2023-01-10 10:26:30 -08:00
Grant Sanderson
27db1c5987 Add arrays_match function 2023-01-10 10:25:59 -08:00
Grant Sanderson
8cd59f852d Add small comments 2023-01-10 09:55:06 -08:00
Grant Sanderson
8175c2d408 Rename quadratic_bezier_geometry_functions to get_xy_to_uv 2023-01-10 09:53:17 -08:00
Grant Sanderson
b31ad49850 A little clean up to fill shader 2023-01-10 09:49:51 -08:00
Grant Sanderson
70113d5a48 Tiny cleanup 2023-01-10 08:58:08 -08:00
Grant Sanderson
4b652be492 Delete get_xyz_to_uv 2023-01-10 08:57:38 -08:00
Grant Sanderson
05796654f4 Replace "bezier_degree" with "is_linear" 2023-01-10 08:54:02 -08:00
Grant Sanderson
2b90f0b244 Add condition for auto-miter joints 2023-01-09 20:30:49 -08:00
Grant Sanderson
dcb166e21b Refresh joint_angles on almost any change 2023-01-09 20:30:29 -08:00
Grant Sanderson
02a0ffe04e Delete quadratic_bezier_distance.glsl 2023-01-09 20:17:10 -08:00
Grant Sanderson
98e358f87d Move a line 2023-01-09 20:10:34 -08:00
Grant Sanderson
494e04405c Refresh all family shader data in align_data 2023-01-09 20:10:06 -08:00
Grant Sanderson
480cc6759f Small cleanup 2023-01-09 19:54:21 -08:00
Grant Sanderson
b4544052d9 Change fill shader to use simpler uv space 2023-01-09 19:54:09 -08:00
Grant Sanderson
f75df1e26e Clean up a few messes from previous commit 2023-01-09 18:51:41 -08:00
Grant Sanderson
c67ae08b62 Have stroke geometry shader pass to a coordinate system where the curve is some segment of y = x^2 2023-01-09 16:46:38 -08:00
Grant Sanderson
d87db65344 Add stand-in for better unit normal treatment 2023-01-09 12:02:50 -08:00
Grant Sanderson
d1c765353d Small comment change 2023-01-09 11:56:27 -08:00
Grant Sanderson
fc86bf7f9e Specify that uniforms can be numpy arrays 2023-01-09 11:56:21 -08:00
Grant Sanderson
ccf7a503c1 Add ANGLE_THRESHOLD constant 2023-01-09 10:52:12 -08:00
Grant Sanderson
ccbb5534fa Remove find_intersection 2023-01-09 10:52:02 -08:00
Grant Sanderson
80c0e88133 Put joint_angle information in VMobject.data 2023-01-09 10:08:03 -08:00
Grant Sanderson
5870274adb Delete unused functions 2023-01-09 00:07:46 -05:00
Grant Sanderson
08c02b21aa Small comment 2023-01-09 00:02:30 -05:00
Grant Sanderson
a6e5f25912 Delete get_reduced_control_points 2023-01-09 00:00:31 -05:00
Grant Sanderson
47d0dca087 Check for null curve 2023-01-08 23:58:45 -05:00
Grant Sanderson
16390283cf Small cleanup for fill shader 2023-01-08 23:34:02 -05:00
Grant Sanderson
89d9e260eb Various cleanups for stroke shader 2023-01-08 23:33:39 -05:00
Grant Sanderson
ae2a253fb1 Just pass one bevel parameter rather than two 2023-01-08 21:56:38 -05:00
Grant Sanderson
0136cef1d9 Minor simplifications for stroke shader 2023-01-08 21:53:43 -05:00
Grant Sanderson
2bf1f5eb40 Make sure pointwise_become_partial doesn't needlessly refresh joint angles 2023-01-08 21:29:35 -05:00
Grant Sanderson
21051ce289 Performance improvement for get_joint_angles 2023-01-08 21:29:08 -05:00
Grant Sanderson
9e7cd1399d Add arr_clip (faster alternative to np.clip) 2023-01-08 21:27:56 -05:00
Grant Sanderson
d5fdc75164 Remove the need to track previous and next joints in stroke shader 2023-01-08 20:29:31 -05:00
Grant Sanderson
cae13aa1f0 Add space 2023-01-08 10:15:22 -05:00
Grant Sanderson
9b2495abb1 Remove "orientation" from locked_keys when recomputed
Rather than re-reading into fill_data
2023-01-05 08:46:12 -05:00
Grant Sanderson
f5455bb554 Avoid using set_points in Rotation 2023-01-05 08:29:59 -05:00
Grant Sanderson
0d433b075e Fix bug associated with orientation data not always getting written
This might reflect a deeper issue with the locked_data sometimes being _too_ locked.
2023-01-04 17:18:10 -08:00
Grant Sanderson
0c1abebd95 Don't save last frame by default 2023-01-04 16:39:59 -08:00
Grant Sanderson
1cf89abf53 No need to track vertex index manually 2023-01-04 16:39:59 -08:00
Grant Sanderson
c30b102458 Use re.sub instead of looping over re.findall 2023-01-04 16:39:59 -08:00
Grant Sanderson
bf5d587204 Merge pull request #1957 from 3b1b/video-work
Refactor TransformMatchingStrings/TransformMatchingShapes
2023-01-02 09:38:08 -08:00
Grant Sanderson
abf1dd3d8b Typo fix 2023-01-02 09:32:10 -08:00
Samyek
333fd2676d update the year 2023-01-01 09:24:42 +00:00
Grant Sanderson
a31c4ae3c2 Add more indexing details to TexTransformExample 2022-12-30 15:19:29 -08:00
Grant Sanderson
4c1f1f8749 Clean up TransformMatchingStrings 2022-12-30 15:09:07 -08:00
Grant Sanderson
3aa9eb6372 Add String.get_symbol_substrings and Tex.get_symbol_substrings 2022-12-30 15:07:41 -08:00
Grant Sanderson
4335e85659 Abstract away logic of TransformMatchingStrings to a new version of TransformMatchingParts 2022-12-30 13:54:55 -08:00
Grant Sanderson
96bc95ef38 Allow FadeTransform to group parts as VGroup if applicable 2022-12-30 13:53:32 -08:00
Grant Sanderson
cec43dfe51 Use Vect3 type in fading.py 2022-12-30 13:53:12 -08:00
Grant Sanderson
50960eefd4 Merge pull request #1953 from 3b1b/video-work
More tweaks and fixes
2022-12-29 21:00:00 -08:00
Grant Sanderson
66f0a57c6b Clean up looks_identical 2022-12-29 20:58:37 -08:00
Grant Sanderson
dddaef0e6c Add lru_cache for get_shader_code_from_file 2022-12-29 20:51:11 -08:00
Grant Sanderson
7895a2cfee No need to immediately compute triangulation for SVG paths 2022-12-29 20:51:00 -08:00
Grant Sanderson
7dde368eeb Ensure error-flash rect is fixed in frame 2022-12-29 20:18:19 -08:00
Grant Sanderson
8e3378f798 Orient Camera.get_pixel_array correctly 2022-12-29 20:17:54 -08:00
Grant Sanderson
632819dd6d Show examples of indexing by substrings and regular expressions 2022-12-29 19:45:29 -08:00
Grant Sanderson
fdccfd51fc Add TexAndNumbersExample 2022-12-29 19:43:12 -08:00
Grant Sanderson
5d87f3f954 Update parents of new_mob in Mobject.replace 2022-12-29 19:42:54 -08:00
Grant Sanderson
3b4a233bb1 Fix LaggedStartMap 2022-12-29 18:53:26 -08:00
Grant Sanderson
4db01fd221 Fix Mobject.looks_identical 2022-12-29 18:53:06 -08:00
Grant Sanderson
5c33c7e4a8 Remove "None" output type for set_animating_status 2022-12-29 18:52:37 -08:00
Grant Sanderson
7df12c68dc Tiny cleanup 2022-12-29 18:52:13 -08:00
Grant Sanderson
0f9adbf91c Add Tex.make_number_changable 2022-12-29 18:52:00 -08:00
Grant Sanderson
04d3e6a47c Interpolate colors using square of rgbs 2022-12-29 16:07:28 -08:00
Grant Sanderson
124c83d94e Merge pull request #1952 from 3b1b/video-work
More miscellaneous tweaks and fixes
2022-12-29 15:53:02 -08:00
Grant Sanderson
d6d75d8f9a Change from np.all(arr) to arr.all() 2022-12-29 15:50:35 -08:00
Grant Sanderson
2dbb9367c4 Default to removing null curves 2022-12-29 15:40:32 -08:00
Grant Sanderson
4bc7e3a8f2 Remove redundant long_line specification 2022-12-29 15:40:18 -08:00
Grant Sanderson
ba68505c18 Flash around border on exceptions in Scene.embed 2022-12-29 15:08:57 -08:00
Grant Sanderson
71815fd7de Add (optional) error sound for exceptions in Scene.embed 2022-12-29 14:58:40 -08:00
Grant Sanderson
cba101995f Allow for customizable exception display mode with Scene.embed 2022-12-29 14:38:25 -08:00
Grant Sanderson
4e014d7a8f Have get_scene_config automatically find intersection of Scene parameters and config keys
Previously it required duplicating any new parameter
2022-12-29 14:36:50 -08:00
Grant Sanderson
13fc8daba9 Extend StringMobject.select_unisolated_substring to work for regular expressions 2022-12-29 14:18:46 -08:00
Grant Sanderson
a54a81744d Have ShaderWrapper.combine_with do nothing for empty arg list 2022-12-29 12:04:35 -08:00
Grant Sanderson
3165a28cd0 Clean up and fix VMobject.get_shader_wrapper_list 2022-12-29 12:04:01 -08:00
Grant Sanderson
25ac5f3507 Use Mobject.1.has_same_shape_as in TransformMatchingStrings 2022-12-29 12:03:17 -08:00
Grant Sanderson
ef09d6fce2 Allow for AnimationGroup to specify that parts belong to a VGroup 2022-12-29 12:02:48 -08:00
Grant Sanderson
3738f0a48e Add Mobject.has_same_shape_as 2022-12-29 12:02:28 -08:00
Grant Sanderson
9018357d20 Fix Mobject.looks_identical 2022-12-29 12:02:20 -08:00
Grant Sanderson
4330f78ed6 Enable lag_ratio for TransformMatchingStrings 2022-12-29 10:44:52 -08:00
Grant Sanderson
1feae23566 Improve num_tex_symbols 2022-12-29 10:37:46 -08:00
Grant Sanderson
aedde4dffc Merge pull request #1951 from 3b1b/video-work
Small tweaks and fixes
2022-12-28 21:37:36 -08:00
Grant Sanderson
53f19b6620 Remove @staticmethod from @wraps functions 2022-12-28 21:36:21 -08:00
Grant Sanderson
42f2461acb Revert "Allow for file_writing to use multiple thread"
This reverts commit 7b0b31e8d9.
2022-12-28 21:22:04 -08:00
Grant Sanderson
4c39c1abd6 Use arr.all() instead of np.all(arr) 2022-12-28 21:06:51 -08:00
Grant Sanderson
596aea3bf5 Update to bezier 2022-12-28 21:06:36 -08:00
Grant Sanderson
7b0b31e8d9 Allow for file_writing to use multiple thread 2022-12-28 21:05:03 -08:00
Grant Sanderson
d6b308ed47 Update elements of VMobject.shader_wrapper_list with depth_test and appropriate uniforms 2022-12-28 19:40:33 -08:00
Grant Sanderson
cc9a4501ad Have **kwargs in matrix pass on to elements 2022-12-28 19:40:02 -08:00
Grant Sanderson
8226396382 Merge pull request #1950 from 3b1b/video-work
Miscellaneous fixes and tweaks
2022-12-28 19:26:17 -08:00
Grant Sanderson
e76b673e63 Change axes height in GraphExample 2022-12-28 19:22:49 -08:00
Grant Sanderson
a6ee54488b Add deep option to VMobject.copy 2022-12-28 19:22:41 -08:00
Grant Sanderson
4f37486655 Have VMobject keep track of a shader_wrapper_list 2022-12-28 19:18:20 -08:00
Grant Sanderson
a92a506224 Don't distinguish stroke uniforms from fill uniforms 2022-12-28 19:17:52 -08:00
Grant Sanderson
8fc243e398 Make anti_alias_width a Mobject uniform, rather than a camera attribute 2022-12-28 18:52:05 -08:00
Grant Sanderson
1180932026 Fix antialiasing issue with straight lines in text 2022-12-28 16:37:44 -08:00
Grant Sanderson
e59b3d2ac0 Update TexTransformExample 2022-12-28 13:39:53 -08:00
Grant Sanderson
926f3515bf Write new TransformMatchingStrings 2022-12-28 13:39:46 -08:00
Grant Sanderson
c7ba775845 In StringMobject.select_parts, default to using select_unisolated_substring if substring was not explicitly isolated 2022-12-28 13:39:13 -08:00
Grant Sanderson
05f02f5154 Fix ShaderWrapper.combine_with 2022-12-28 13:38:27 -08:00
Grant Sanderson
34d8ab81f9 Fix for num_tex_symbols 2022-12-28 13:38:15 -08:00
Grant Sanderson
44dc22e5e4 Rename local_unit_normal to unit_normal 2022-12-28 11:17:55 -08:00
Grant Sanderson
4d65ceabf7 Include zero in orientation checks 2022-12-28 11:17:45 -08:00
Grant Sanderson
b96a65d576 Tweaks to quadratic_bezier_geometry_functions 2022-12-28 11:16:53 -08:00
Grant Sanderson
c8c96fe645 Tweaks to get_unit_normal 2022-12-28 11:16:24 -08:00
Grant Sanderson
6204011fe4 Don't check point equality in triggers_refreshed_triangulation 2022-12-28 10:15:03 -08:00
Grant Sanderson
083de38e4c Remove "arbitrary-seeming branching" 2022-12-28 10:05:44 -08:00
Grant Sanderson
7dc1fe21bd Change angle threshold for determining bezier degree 2022-12-28 09:31:20 -08:00
Grant Sanderson
a6e21b2ccd Change Mobject.append_points
For future plans, it may be nicest for data["points"] to only ever get redefined by Mobject.resize_points
2022-12-28 09:22:22 -08:00
Grant Sanderson
97be203b57 Add type hint 2022-12-28 08:45:18 -08:00
Grant Sanderson
61155f5c72 Simplify Mobject.set_points 2022-12-28 08:45:05 -08:00
Grant Sanderson
966e2c9790 Update VMobject.has_fill and has_stroke 2022-12-27 22:18:54 -08:00
Grant Sanderson
e73ae78987 Update Mobject.has_points 2022-12-27 22:18:41 -08:00
Grant Sanderson
816f6eb297 Use ShaderWrapper.read_in instead of combine_with
Improves speed
2022-12-27 21:40:34 -08:00
Grant Sanderson
e54e04a5ce Add ShaderWrapper.read_in
This will function similarly to combine_with, but without necessarily having to allocate new memory
2022-12-27 21:39:20 -08:00
Grant Sanderson
49d4472e7e Add StringMobject.get_specified_substrings 2022-12-27 19:13:09 -08:00
Grant Sanderson
6044e475a4 Tiny VMobject.has_stroke update 2022-12-27 19:12:55 -08:00
Grant Sanderson
8c44834554 Compute triangulation before replicating 2022-12-27 19:12:36 -08:00
Grant Sanderson
795f6e2490 Remove unit_normal attribute 2022-12-27 19:12:00 -08:00
Grant Sanderson
6d50be55d3 Small inconsequential edits to get_triangulation 2022-12-27 15:54:12 -08:00
Grant Sanderson
f2859a9a8c Give default curve orientation of 1 2022-12-27 15:53:24 -08:00
Grant Sanderson
33a92d3ab3 Small cleanup in camera.py 2022-12-27 14:53:55 -08:00
Grant Sanderson
934a73ddb8 Remove stray import 2022-12-27 14:29:13 -08:00
Grant Sanderson
2b67aa0e01 Type hints for Window class variables 2022-12-26 09:40:11 -07:00
Grant Sanderson
3bf5ce5776 Fix TexMobject.select_unisolated_substring for substrings with escape characters 2022-12-26 09:02:00 -07:00
Grant Sanderson
db0770a4fd Remove **kwargs from Mobject.__init__ 2022-12-26 07:58:40 -07:00
Grant Sanderson
a2bdf54025 Remove unused parameter 2022-12-26 07:58:30 -07:00
Grant Sanderson
22c67df2ad Simplify Scene.remove to not require a Mobject.get_ancestors call 2022-12-26 07:46:40 -07:00
Grant Sanderson
fcff44a66b Merge pull request #1943 from 3b1b/string-mobject-refactor
StringMobject refactor
2022-12-23 17:11:30 -08:00
Grant Sanderson
62c9e2b58f Fix data["orientation"] alignment issue a separate way 2022-12-23 18:09:09 -07:00
Grant Sanderson
db52d0a73f Add type hints and @staticmethod decorators to wraps functions 2022-12-23 17:45:35 -07:00
Grant Sanderson
580d57a45c Add type hints and @staticmethod decorators to wraps functions 2022-12-23 17:44:00 -07:00
Grant Sanderson
453b863738 Be sure to align data in FadeTransform 2022-12-23 17:24:33 -07:00
Grant Sanderson
7f203d1611 Remove triangulation cachine 2022-12-23 13:33:07 -07:00
Grant Sanderson
dd2fb6ae74 Delete refresh_unit_normal 2022-12-23 10:23:57 -07:00
Grant Sanderson
40bf1fd6a9 Stop tracking unit_normal in data
Track orientation of each curve instead
2022-12-23 10:08:23 -07:00
Grant Sanderson
3878b8c077 Fix rotation_between_vectors 2022-12-23 10:04:27 -07:00
Grant Sanderson
ef04b9eb01 Revert "Simplify get_unit_normal to always recompute"
This reverts commit 96d391d9fd.
2022-12-22 18:07:46 -07:00
Grant Sanderson
baf2690d77 In rotation_between_vectors, account for the case where vectors align 2022-12-22 17:57:47 -07:00
Grant Sanderson
c36d178856 Trigger unit normal refresh for all bounding_box refreshes 2022-12-22 17:51:59 -07:00
Grant Sanderson
96d391d9fd Simplify get_unit_normal to always recompute 2022-12-22 17:51:22 -07:00
Grant Sanderson
8c5d4db411 Ensure VMobject.get_area_vector works with uneven number of points 2022-12-22 12:09:54 -07:00
Grant Sanderson
b7d473ff43 Revert "Revert back from the needs_new_unit_normal change in favor of recomputation"
This reverts commit d8deec8f81.
2022-12-22 12:03:33 -07:00
Grant Sanderson
fca7c0609a Factor out epsilon in earclip_triangulation 2022-12-22 11:53:14 -07:00
Grant Sanderson
a4d47f64b0 Fix normalize_along_axis 2022-12-22 11:52:55 -07:00
Grant Sanderson
5af4b9cc65 No need to refresh triangulation in flip 2022-12-22 11:52:30 -07:00
Grant Sanderson
ff090c016f Use only anchors to compute area vector 2022-12-22 11:46:51 -07:00
Grant Sanderson
33682b7199 MTex is the new Tex, Tex is now OldTex
Global replace
Tex -> OldTex
TexText -> OldTexText
MTex -> Tex
MTexText -> TexText
2022-12-21 13:18:20 -08:00
Grant Sanderson
805236337e Remove stray import 2022-12-21 12:52:32 -08:00
Grant Sanderson
958c34c705 Push functionality for selecting unisolated substrings up into StringMobject 2022-12-21 12:47:48 -08:00
Grant Sanderson
10d53c82e1 Improved num_tex_symbols
Based on data gathered for tex commands
2022-12-21 12:47:18 -08:00
Grant Sanderson
6277e28373 Have MTex.__getitem__ call MTex.select_parts 2022-12-20 22:37:23 -08:00
Grant Sanderson
4b73140435 Have MTex.select_parts fall back on dirty_select with a warning 2022-12-20 22:37:01 -08:00
Grant Sanderson
ef941b4040 Factor out num_tex_symbols 2022-12-20 22:35:41 -08:00
Grant Sanderson
81e6ab5b1d Add MTex.dirty_select
A more general way to select subparts by tex. Not as reliable as select_parts, but useful in many cases.
2022-12-20 17:02:29 -08:00
Grant Sanderson
e357885da0 Replace TexText with MTexText 2022-12-20 15:24:38 -08:00
Grant Sanderson
6d5b980d4a Replace Tex and MTex throughout library 2022-12-20 15:22:34 -08:00
Grant Sanderson
0d525baf29 Clean up special_tex contents, make each class use MTexText instead of TexText 2022-12-20 15:08:54 -08:00
Grant Sanderson
3293f72adc Move BulletedList, TexTextFromPresetString and Title to their own file 2022-12-20 14:48:54 -08:00
Grant Sanderson
e0725c111e Allow MTex to accept multiple strings as an argument 2022-12-20 14:32:04 -08:00
Grant Sanderson
6176bcd45a Add option for StringMobject to only render one svg 2022-12-20 14:32:04 -08:00
Grant Sanderson
9c106eb873 Add option for StringMobject to only render a single svg
Then set as the default behavior for MTex and Text
2022-12-20 14:31:17 -08:00
Grant Sanderson
1a485ddd19 Ensure color_to_hex always returns 6 character hex codes 2022-12-20 14:31:17 -08:00
Grant Sanderson
d4417d3d07 Add t2c option to MTex 2022-12-20 14:31:17 -08:00
Grant Sanderson
dd662b0d12 Move Selector and Span to manimlib.typing 2022-12-20 14:29:17 -08:00
Grant Sanderson
6beea2a7eb Merge pull request #1942 from 3b1b/video-work
Refactor config.py
2022-12-20 09:36:46 -08:00
Grant Sanderson
623aef41f8 Rename get_camera_configuration -> get_camera_config 2022-12-20 09:36:07 -08:00
Grant Sanderson
9f71f87278 Refactor config.py 2022-12-20 09:31:02 -08:00
Grant Sanderson
67912e26d3 Merge pull request #1941 from 3b1b/video-work
Small bug fixes and refactors
2022-12-19 21:20:01 -08:00
Grant Sanderson
a26fe605b3 Slight refactor for inserted_embed_line 2022-12-19 21:17:44 -08:00
Grant Sanderson
5c7caee902 Go back to writing a new file for insert_embed, but edit the module's __file__ attribute 2022-12-19 21:14:29 -08:00
Grant Sanderson
c605ac1c83 Better height, width, unit_size behavior for CoordinateSystems 2022-12-19 20:34:42 -08:00
Grant Sanderson
d8deec8f81 Revert back from the needs_new_unit_normal change in favor of recomputation 2022-12-19 18:17:25 -08:00
Grant Sanderson
75a98a8936 Change color_to_hex implementation 2022-12-19 18:03:53 -08:00
Grant Sanderson
073a62bf03 Factor rgb_to_hex, hex_to_int and int_to_hex away from StringMobject and to utils/color 2022-12-19 17:28:22 -08:00
Grant Sanderson
78fd6d3f35 Merge pull request #1938 from 3b1b/video-work
Small refactors and bug fixes
2022-12-19 17:08:08 -08:00
Grant Sanderson
e0e7e24351 Move display_during_execturion call
Such that it only gets called when a new svg needs to be written
2022-12-19 17:01:06 -08:00
Grant Sanderson
c2c8149627 Revert "Move display_during_exection associated with Latex rendering"
This reverts commit ab470c3ee5.
2022-12-19 16:54:55 -08:00
Grant Sanderson
a53867d8a1 Fix TexText bug 2022-12-19 16:54:44 -08:00
Grant Sanderson
b2fd22c539 Small cleanups 2022-12-19 16:21:40 -08:00
Grant Sanderson
5c0232a5e0 Have LatexError show line of error and the next line
This is where undefined control sequence errors will show up.
2022-12-19 16:20:19 -08:00
Grant Sanderson
ab470c3ee5 Move display_during_exection associated with Latex rendering
Only have it display when a new SVG is being written
2022-12-19 16:19:43 -08:00
Grant Sanderson
71c9144952 Use io.BytesIO rather than writing to a temp file 2022-12-19 16:03:16 -08:00
Grant Sanderson
8d05431b7b Add points in reverse order to AngularSector 2022-12-19 14:43:57 -08:00
Grant Sanderson
96d9e41a35 Refresh unit normal on init of brace 2022-12-19 14:43:27 -08:00
Grant Sanderson
2c20a1509e Remoe height defaults form __init__args of SingleStringTex and String 2022-12-19 14:43:10 -08:00
Grant Sanderson
ef64b90ed3 Allow for default height/width of SVGMobject specified as class variables 2022-12-19 14:42:04 -08:00
Grant Sanderson
f158d3e751 Give unit_normal refreshing the same behavior as triangulation
That is, don't actually compute it until it needs to be. This is necessary so that VMobject.append_points can refresh both of those, without effecting SVG initialization.
2022-12-19 14:41:06 -08:00
Grant Sanderson
4632228cac Merge pull request #1937 from 3b1b/video-work
Small bug fixes and refactorings
2022-12-19 11:40:41 -08:00
Grant Sanderson
d79e1d6ed8 Move shell instantiation to beginning of checkpoint_paste 2022-12-19 11:36:28 -08:00
Grant Sanderson
6615a912bd Add default_camera_config class variable to Scene, likewise for window and file_writer configuration 2022-12-19 11:35:43 -08:00
Grant Sanderson
99fa3ee620 Refactor Scene.embed and checkpoint_paste 2022-12-19 10:51:26 -08:00
Grant Sanderson
c330dfddae Add space 2022-12-19 10:38:06 -08:00
Grant Sanderson
ba93bd0cbf Replace unit_size with get_unit_size() 2022-12-18 19:52:59 -08:00
Grant Sanderson
b1f363d5a9 Expand input type for AnimationGroup 2022-12-18 19:52:48 -08:00
Grant Sanderson
e5c13ba9d7 Use shell.run_cell instead of paste line magic
Because %paste -q line magic introduces issues with IPython 8.2 and above
2022-12-18 12:20:14 -08:00
Grant Sanderson
3c04ffc513 Better functionality for default axis configuration on coordinate systems 2022-12-18 12:19:26 -08:00
Grant Sanderson
4f6c387a03 Edit interact message 2022-12-18 12:01:33 -08:00
Grant Sanderson
38c4fd8770 Remove unnecessary save 2022-12-18 11:54:57 -08:00
Grant Sanderson
3e4b6a7fb0 Add show_progress and skip options to checkpoint_paste 2022-12-18 11:21:57 -08:00
Grant Sanderson
af471161ea Fix 'Failed to get module" warning with Scene embed 2022-12-18 11:11:08 -08:00
Grant Sanderson
e728196814 Remove implicit string concatenation 2022-12-18 10:50:34 -08:00
Grant Sanderson
99dbf6b8c3 Edited insert_embed_line to write over existing file rather than creating a new one
Otherwise behavior of things like __file__ is not as expected.
2022-12-18 10:50:17 -08:00
Grant Sanderson
07feb33cbb Merge pull request #1932 from 3b1b/kill-config
Kill config
2022-12-18 10:27:15 -08:00
Grant Sanderson
44b7d33784 Delete config.rst 2022-12-18 09:40:51 -08:00
Grant Sanderson
0433cd727c Tweak type hints in matrix.py 2022-12-18 09:38:46 -08:00
Grant Sanderson
c96cdf43a1 Make sure mutability of dict arguments won't cause problems
One could argue that a pattern of "arg: dict | None = None" followed by "self.param = arg or dict()" is better, but that would make for an inconsistent pattern in cases where the default argument is not None.
2022-12-18 09:38:28 -08:00
Grant Sanderson
903e140719 Add from __future__ import annotations 2022-12-18 09:13:11 -08:00
Grant Sanderson
f8b39f2ff1 Allow Scalable type to be any FloatArray 2022-12-18 09:11:16 -08:00
Grant Sanderson
6f0020950f Make Scalable a Typevar 2022-12-17 22:28:53 -08:00
Grant Sanderson
7ac78f3dbb Updating type hints for paths.py 2022-12-17 22:14:53 -08:00
Grant Sanderson
f53fad1a96 Avoid implicit string concatenation 2022-12-17 22:14:43 -08:00
Grant Sanderson
c96a698713 Remove unused drag_pixels 2022-12-17 22:14:30 -08:00
Grant Sanderson
f6ff226cd4 Remove stray imports 2022-12-17 22:14:20 -08:00
Grant Sanderson
4dec67f9fe Move unused (and slightly absurd) dict-related helper functions to 3b1b/videos/once_useful_constructs 2022-12-17 22:00:37 -08:00
Grant Sanderson
0dab04080e No need to have a get_runtime helper when many other options exist 2022-12-17 21:53:15 -08:00
Grant Sanderson
fd20ead11b Update output type for make_even 2022-12-17 21:51:01 -08:00
Grant Sanderson
3f024175d4 Add check for invalid entries to Mobject.set_points 2022-12-17 19:52:34 -08:00
Grant Sanderson
26ff1a9716 Fix bug associated with GlowDot having None points list 2022-12-17 19:49:04 -08:00
Grant Sanderson
d4a29df99c Remove needless data["points"] reference 2022-12-17 19:48:47 -08:00
Grant Sanderson
75979eb7d1 Add NULL_POINTS constant 2022-12-17 19:48:27 -08:00
Grant Sanderson
365bb12dce Change type hints for set_points and append_points to Vect3Array 2022-12-17 19:31:43 -08:00
Grant Sanderson
0115037c82 Include types in universal imports 2022-12-17 19:31:27 -08:00
Grant Sanderson
38db5ca9b9 Replace handle_play_like_call with pre_play and post_play method 2022-12-17 18:59:05 -08:00
Grant Sanderson
24fd6d890e Tweak type hints for bezier.py 2022-12-17 18:35:26 -08:00
Grant Sanderson
810f2c67ab Make handle_play_like_call a static method 2022-12-17 18:11:38 -08:00
Grant Sanderson
bd537afe72 Remove skip and show_progress options of checkpoint_paste 2022-12-17 18:11:25 -08:00
Grant Sanderson
3e8738de2a Fix output type of VMobject.get_subpaths_from_points 2022-12-17 18:04:55 -08:00
Grant Sanderson
b817e6f15f Tweak type hints in color.py 2022-12-17 17:29:49 -08:00
Grant Sanderson
5b697b3782 Remove stray import 2022-12-17 17:29:39 -08:00
Grant Sanderson
0e558db122 Add a few type hints to specify VMobject family always consists of VMobjects 2022-12-17 17:03:34 -08:00
Grant Sanderson
1f0427d685 Add height as attribute to SVGMobject 2022-12-17 13:17:12 -08:00
Grant Sanderson
534770180d Remove stray import 2022-12-17 13:16:55 -08:00
Grant Sanderson
97f28b34f3 Distinguish Vect3 from Vect3Array types 2022-12-17 13:16:48 -08:00
Grant Sanderson
8db20cc460 Small fix 2022-12-16 20:59:14 -08:00
Grant Sanderson
5625f63ca2 Clean up SVG.__Init__ and fix style issue 2022-12-16 20:59:02 -08:00
Grant Sanderson
cef6506920 Add better types + Small refactors on space_ops 2022-12-16 20:35:45 -08:00
Grant Sanderson
dec11a4b17 Rename np_vector type to Vect3 or Vect4 to make context clearer 2022-12-16 20:35:26 -08:00
Grant Sanderson
43fd5e1aea Move custom type to manimlib.typing 2022-12-16 20:19:18 -08:00
Grant Sanderson
c00af3c1bf Rename config_ops -> dict_ops 2022-12-16 18:59:23 -08:00
Grant Sanderson
ef0999cc09 Rename config_ops -> dict_ops 2022-12-16 15:23:43 -08:00
Grant Sanderson
a4272d11a2 Finish last(?) digest_config vestige 2022-12-16 15:21:31 -08:00
Grant Sanderson
a6db0877de Remove stray imports 2022-12-16 15:21:14 -08:00
Grant Sanderson
2bab16133d Fix textured path bug 2022-12-16 15:04:15 -08:00
Grant Sanderson
d798f5ebf0 Small bug fix 2022-12-16 15:02:42 -08:00
Grant Sanderson
7510c9808e expand type for ParametricFunction function 2022-12-16 15:02:35 -08:00
Grant Sanderson
1a0eff05fa Ensure t_range always has three entries 2022-12-16 15:02:21 -08:00
Grant Sanderson
123f7e5a30 Better default color behavior 2022-12-16 14:48:13 -08:00
Grant Sanderson
15f03dae7b Small fixes to Axes configuration 2022-12-16 14:47:56 -08:00
Grant Sanderson
c6fc8dcf45 Remove stray import 2022-12-16 11:41:49 -08:00
Grant Sanderson
b21f5bad00 Fix small t2c issue 2022-12-16 11:41:42 -08:00
Grant Sanderson
afab37c2d2 Remove stray digest_config references 2022-12-16 11:00:59 -08:00
Grant Sanderson
a1cbff46b8 Remove CONFIG vestiges 2022-12-16 10:54:28 -08:00
Grant Sanderson
ea4a47aeef Kill CONFIG in mtex_mobject.py 2022-12-16 10:54:14 -08:00
Grant Sanderson
9ad370a04b Move all contents of once_useful_constructs out of this repo
And into 3b1b/videos
2022-12-16 10:43:59 -08:00
Grant Sanderson
e4aebaf791 Remove old constructs that were too specific to old 3b1b videos and are not worth fixing
Or rather, move them over to 3b1b/videos repo
2022-12-16 10:26:04 -08:00
Grant Sanderson
0ad2f18ca6 Delete ShowPassingFlashWithThinningStrokeWidth 2022-12-16 10:16:52 -08:00
Grant Sanderson
89770158de Kill CONFIG in vector_field.py 2022-12-16 10:16:13 -08:00
Grant Sanderson
271e2f0865 Kill CONFIG in value_tracker.py 2022-12-16 10:02:12 -08:00
Grant Sanderson
ae52f19a4a Remove stray CONFIG vestiges 2022-12-16 10:02:03 -08:00
Grant Sanderson
c2cf261c81 Kill CONFIG in three_dimensions.py 2022-12-16 09:56:38 -08:00
Grant Sanderson
880aaf913f Change default fill from WHITE to GREY_C 2022-12-16 09:56:29 -08:00
Grant Sanderson
72aaed57d5 Push depth_test into __init__ args 2022-12-16 09:56:17 -08:00
Grant Sanderson
f64cae1db4 Push depth_test into __init__ args 2022-12-16 09:56:03 -08:00
Grant Sanderson
9e077b29db Specify fill_color/stroke_color instead of color 2022-12-16 09:55:50 -08:00
Grant Sanderson
a04d4c0d79 Kill CONFIG in shape_matchers 2022-12-15 20:48:53 -08:00
Grant Sanderson
fa7ee22c46 Kill CONFIG in probability.py 2022-12-15 20:40:13 -08:00
Grant Sanderson
7e46c87fc5 Kill CONFIG in numbers.py 2022-12-15 20:33:58 -08:00
Grant Sanderson
9039fe69e4 Kill CONFIG in number_line.py 2022-12-15 20:26:10 -08:00
Grant Sanderson
451f1df830 Small nudge to import order 2022-12-15 20:11:32 -08:00
Grant Sanderson
a7d7ed0793 Kill CONFIG, and slightly refactor, matrix.py 2022-12-15 20:09:52 -08:00
Grant Sanderson
9d65ef3cae Kill CONFIG in interactives.py 2022-12-15 18:29:05 -08:00
Grant Sanderson
2a645b27f8 Kill CONFIG in geometry.py 2022-12-15 18:19:09 -08:00
Grant Sanderson
c244f8738f Remove stray import 2022-12-15 18:18:59 -08:00
Grant Sanderson
3be43119cb Remove stray import 2022-12-15 18:18:52 -08:00
Grant Sanderson
37786edc99 Small type fix 2022-12-15 18:18:44 -08:00
Grant Sanderson
25388b4ad3 Kill CONFIG in functions.py 2022-12-15 16:47:03 -08:00
Grant Sanderson
00403fe5b4 Change default stroke color 2022-12-15 16:46:51 -08:00
Grant Sanderson
02143001a4 Move RangeSpecifier to constants 2022-12-15 16:46:42 -08:00
Grant Sanderson
a05820b7c7 Kill CONFIG in frame.py 2022-12-15 16:28:15 -08:00
Grant Sanderson
5b5b3a7d20 Kill CONFIG in coordinate_system 2022-12-15 16:19:03 -08:00
Grant Sanderson
57875875c1 Kill CONFIG in changing.py 2022-12-15 15:40:56 -08:00
Grant Sanderson
a78e2b6ad2 Specify ManimColor type 2022-12-15 15:40:46 -08:00
Grant Sanderson
da90c5e297 Allow for multivalued style arguments 2022-12-15 15:40:36 -08:00
Grant Sanderson
4c894077d3 Add np_vector types to constants 2022-12-15 15:24:08 -08:00
Grant Sanderson
c56968fd09 Cleaner imports 2022-12-15 15:23:59 -08:00
Grant Sanderson
c8d01e7a43 Kill CONFIG in drawings.py 2022-12-15 14:28:34 -08:00
Grant Sanderson
3b5181d1a3 Kill CONFIG in StringMobject and Text 2022-12-15 13:35:13 -08:00
Grant Sanderson
588c3fce02 Allow style configuration to be None 2022-12-15 12:48:43 -08:00
Grant Sanderson
a3215d0354 Fix small height bug 2022-12-15 12:48:27 -08:00
Grant Sanderson
c55374245d Kill config in svg_mobject 2022-12-15 12:48:06 -08:00
Grant Sanderson
c2766c9837 Remove stray import 2022-12-15 12:47:53 -08:00
Grant Sanderson
5a309d41b7 Undo potentially undefined typing 2022-12-15 11:33:53 -08:00
Grant Sanderson
10c0f4b694 Don't pass kwargs to Animation from LaggedStart 2022-12-15 11:33:41 -08:00
Grant Sanderson
2a89e84538 Kill CONFIG in brace.py 2022-12-15 11:33:27 -08:00
Grant Sanderson
aac320aa98 Update Checkmark and Exmark definitions 2022-12-15 11:33:14 -08:00
Grant Sanderson
7aa5c83a14 Kill CONFIG in tex_mobject.py 2022-12-15 11:33:00 -08:00
Grant Sanderson
d4b6bf40e5 Small type fixes 2022-12-15 10:17:57 -08:00
Grant Sanderson
002129e7a2 Remove stray import 2022-12-15 10:17:43 -08:00
Grant Sanderson
1aaa3b4ad5 Remove unnecessary import 2022-12-15 10:12:10 -08:00
Grant Sanderson
a39c65cb5c Fix type 2022-12-15 10:11:58 -08:00
Grant Sanderson
6c4e028eab Kill CONFIG in surface.py 2022-12-15 10:11:50 -08:00
Grant Sanderson
bab1f964bb Add types to constants 2022-12-15 09:56:08 -08:00
Grant Sanderson
3a65eb4d2c Kill CONFIG in ImageMobject 2022-12-15 09:56:01 -08:00
Grant Sanderson
98c53151ad Correct type for texture_paths 2022-12-15 09:55:50 -08:00
Grant Sanderson
b373e33a22 Kill CONFIG in dot_cloud.py 2022-12-15 09:37:32 -08:00
Grant Sanderson
a715a5bc3f Kill CONFIG in vectorized_mobject.py 2022-12-15 09:19:05 -08:00
Grant Sanderson
97a5861ccf Remove stray "kwargs" 2022-12-15 09:18:53 -08:00
Grant Sanderson
e8c220a3f2 Add np_vector shorthand type to constants 2022-12-15 09:18:41 -08:00
Grant Sanderson
133ac8bb26 Kill CONFIG in mobject.py 2022-12-15 09:18:22 -08:00
Grant Sanderson
a817364a0e Remove three_d_scene import 2022-12-15 08:14:35 -08:00
Grant Sanderson
33b4e617a6 Move ThreeDScene to once_useful_constructs 2022-12-15 08:09:31 -08:00
Grant Sanderson
c57f1f997a Kill CONFIG in vector_space_scene and move to once_useful_constructs 2022-12-15 08:08:40 -08:00
Grant Sanderson
0b994db0ec Make camera_config changable as a class variable 2022-12-14 17:14:53 -08:00
Grant Sanderson
69b0b0727e Kill CONFIG in scene_file_writer.py 2022-12-14 17:07:05 -08:00
Grant Sanderson
013bf8b639 Kill CONFIG in scene.py 2022-12-14 17:01:46 -08:00
Grant Sanderson
2f8fe689d9 Kill CONFIG in camera.py 2022-12-14 16:41:19 -08:00
Grant Sanderson
a0a17be6ea Remove digest_config 2022-12-14 16:27:33 -08:00
Grant Sanderson
4e8b80fe86 Ensure shift continues to be second arg of FadeOut 2022-12-14 16:27:25 -08:00
Grant Sanderson
53994f0650 Add shorthand for type np.ndarray[int, np.dtype[np.float64]] 2022-12-14 16:17:15 -08:00
Grant Sanderson
ca1ba67a85 Kill config in update.py 2022-12-14 16:02:15 -08:00
Grant Sanderson
4aa7d439f1 Kill CONFIG in transform_matching_parts animations 2022-12-14 15:55:02 -08:00
Grant Sanderson
0aa451396d Kill CONFIG in specialized.py 2022-12-14 15:13:30 -08:00
Grant Sanderson
a6744a19d3 Kill CONFIG in rotation.py 2022-12-14 15:08:20 -08:00
Grant Sanderson
02c3243f98 Kill CONFIG in numbers.py 2022-12-14 15:02:25 -08:00
Grant Sanderson
81615d9f4b Kill CONFIG in movement.py 2022-12-14 14:58:25 -08:00
Grant Sanderson
7dcf5eff8e Kill CONFIG in indication.py 2022-12-14 14:40:05 -08:00
Grant Sanderson
a901704b31 Return self in Circle.surround 2022-12-14 14:39:57 -08:00
Grant Sanderson
c8442c404e Refresh triangulation after reversing points 2022-12-14 14:39:49 -08:00
Grant Sanderson
7474a98752 Kill config in growing.py 2022-12-14 12:08:18 -08:00
Grant Sanderson
5571c7d576 Kill config in transform.py 2022-12-14 12:05:33 -08:00
Grant Sanderson
adf886dced Add 'Callable' import 2022-12-14 11:27:13 -08:00
Grant Sanderson
f6858778c4 Kill config in fading 2022-12-14 11:27:00 -08:00
Grant Sanderson
98a969242a Add (optional) quieting for checkpoint_paste 2022-12-14 11:02:51 -08:00
Grant Sanderson
44a7cfa12e Update output types for VMobject.get_family and VMobject.replicate 2022-12-14 11:02:16 -08:00
Grant Sanderson
187de0163f Kill config in creation.py 2022-12-14 10:58:35 -08:00
Grant Sanderson
958002152e Define ManimColor type in constants 2022-12-14 10:55:32 -08:00
Grant Sanderson
a7bf10c570 Kill composition CONFIGs 2022-12-13 16:52:32 -08:00
Grant Sanderson
6f470679f7 Kill Animation CONFIG 2022-12-13 15:45:57 -08:00
Ikko Ashimine
155cde26da Fix typo in vectorized_mobject.py (#1913)
lenth -> length
2022-12-13 14:57:23 +08:00
Grant Sanderson
a801aefcea Merge pull request #1906 from 3b1b/video-work
Video work
2022-11-18 09:16:18 -08:00
Grant Sanderson
5281a83e9d Add overshoot rate func 2022-11-18 09:12:52 -08:00
Grant Sanderson
7de03e2541 Change/refactor progress display defaults in scene file writing 2022-11-18 09:12:40 -08:00
Grant Sanderson
8cc7616271 Bind 'u' to unselection 2022-11-18 09:12:12 -08:00
Grant Sanderson
15a446977f Added type for ValueTracker 2022-11-18 09:11:59 -08:00
Grant Sanderson
12d4b48508 Make sure animating status propagates through ancestors 2022-11-18 09:11:47 -08:00
Grant Sanderson
a4ffe9b4e5 Allow group_by_rows and group_bg_cols option for creating grids 2022-11-18 09:11:29 -08:00
Grant Sanderson
b6dd640fe7 Add Mobject.reverse_submobjects 2022-11-18 09:10:44 -08:00
Grant Sanderson
83393abb22 Fix bug deleting i from coordinate labels 2022-11-18 09:10:24 -08:00
Grant Sanderson
90e8a397b8 add_axis_labels for ThreeDAxes 2022-11-18 09:09:21 -08:00
Grant Sanderson
6683c9dbca Add get_graph for 3d surfaces off of ThreeDAxes 2022-11-18 09:09:06 -08:00
Grant Sanderson
004b7427f5 Allow bound graphs to track discontinuities 2022-11-18 09:08:30 -08:00
Grant Sanderson
d8e4c1d698 Account for updated rate_func usage in Rotate 2022-11-18 09:07:33 -08:00
Grant Sanderson
4e7f06dea8 Change rate_func to be used in submobject update
This allows for rate functions like overshoot and running start who have outputs outside of [0, 1] to still be used effectively.
2022-11-18 09:07:18 -08:00
Grant Sanderson
e55dd01081 Merge pull request #1890 from 3b1b/video-work
Fix Restore
2022-11-04 12:28:40 -07:00
Grant Sanderson
b94e9f3a24 Fix Restore 2022-11-04 12:27:50 -07:00
Grant Sanderson
764dec20eb Merge pull request #1889 from 3b1b/bug-fixes
Bug fixes
2022-11-03 16:49:40 -07:00
Grant Sanderson
8adf99b8a7 Fix Circle.point_at_angle
https://github.com/3b1b/manim/issues/1875
2022-11-03 16:48:30 -07:00
Grant Sanderson
a2606c7e37 Make sure find_intersection returns a result matching the shape of inputs 2022-11-03 16:48:14 -07:00
Grant Sanderson
84fa3de435 By default, don't let Mobject.become match updaters
This causes the use of Mobject.become in an updater function to make the mobject immediately lose its updater.

https://github.com/3b1b/manim/issues/1877
2022-11-03 16:35:41 -07:00
Grant Sanderson
f878537814 Don't have Matrix try to convert lists of Mobject into numpy arrays
https://github.com/3b1b/manim/issues/1878
2022-11-03 16:31:19 -07:00
Grant Sanderson
8e6265d35e Give set_color_by_gradient more expected behavior
https://github.com/3b1b/manim/issues/1882
2022-11-03 16:17:17 -07:00
Grant Sanderson
834c806e83 Merge pull request #1888 from 3b1b/video-work
Video work
2022-11-03 16:05:34 -07:00
Grant Sanderson
471dcdbaf1 Merge pull request #1879 from zaharkogan/patch-1
Update LICENSE.md
2022-11-03 15:45:00 -07:00
Grant Sanderson
ee668dc741 Merge pull request #1858 from IcyChlorine/bugfix_progress_bar
Fix bug with rendering progress bar
2022-11-03 15:44:32 -07:00
Grant Sanderson
d28ba53f22 Merge branch 'video-work' of github.com:3b1b/manim into video-work 2022-11-03 11:34:01 -07:00
Grant Sanderson
faa37844e7 Add unit_tex option for NumberLine.add_numbers 2022-11-03 11:32:25 -07:00
Grant Sanderson
80d34547db Typo fix 2022-11-03 11:32:25 -07:00
Grant Sanderson
ce77f38bf1 Add CoordinateSystem.bind_graph_to_func 2022-11-03 11:32:25 -07:00
Grant Sanderson
1bd3d61b08 Add unit_tex option for NumberLine.add_numbers 2022-11-03 11:30:20 -07:00
Grant Sanderson
c3c1d3ec35 Typo fix 2022-11-03 11:29:49 -07:00
Grant Sanderson
e89f193c56 Add CoordinateSystem.bind_graph_to_func 2022-11-03 11:29:43 -07:00
Zakhar Kogan
8dfa6415dc Update LICENSE.md
Source: https://softwareengineering.stackexchange.com/questions/210472/is-renewal-of-mit-license-needed-on-github-at-the-beginning-of-each-year
2022-10-11 15:33:50 +03:00
Maciej Musielik
fb50e4eb55 Fixing a typo ("termnial" -> "terminal") (#1872) 2022-10-01 16:07:09 +08:00
Grant Sanderson
abe52a61d9 Merge pull request #1864 from 3b1b/video-work
Video work
2022-09-13 14:12:05 -07:00
Grant Sanderson
88f2ae6d0d Merge branch 'master' of github.com:3b1b/manim into video-work 2022-09-13 14:08:15 -07:00
Grant Sanderson
d2e570eb19 Merge pull request #1862 from widcardw/dev
Add `set_anim_args` to `.animate` method
2022-09-13 12:42:36 -07:00
Grant Sanderson
d48957c312 Merge pull request #1818 from YishiMichael/refactor
Add `template` and `additional_preamble` parameters to `Tex`
2022-09-13 12:42:15 -07:00
Grant Sanderson
0c75d79080 Have window default to half monitor width instead of half height 2022-09-13 11:46:33 -07:00
widcardw
603a773847 fix: pass args by calling animate that borrowed from CE 2022-09-11 22:59:43 +08:00
widcardw
2f691355db chore: add doc-string of set_anim_args 2022-09-11 10:31:30 +08:00
widcardw
a613099b1d feat: add set_anim_args to .animate method 2022-09-11 10:22:08 +08:00
YishiMichael
fa1d938af1 chore: Optimize warning info 2022-09-10 23:55:52 +08:00
YishiMichael
455d6604be chore: Restrict version of svgelements 2022-09-07 13:28:27 +08:00
YishiMichael
4a575afdde chore: Remove unused namespace constants 2022-09-07 13:23:02 +08:00
YishiMichael
ae115d9992 refactor: Remove expansion of <use> elements 2022-09-07 13:19:08 +08:00
IcyChlorine
8882030136 thumbnails 2022-08-27 12:11:55 +08:00
IcyChlorine
8719107b18 fix the bug that progress bar can't be correctly showed while rendering if scene class name isn't passed in args explicitly. 2022-08-27 11:25:36 +08:00
YishiMichael
53c43ee8ea fix: recover default_config.yml 2022-08-23 11:41:21 +08:00
YishiMichael
3c0abb0b40 fix: add missed imports 2022-08-23 11:40:19 +08:00
YishiMichael
eadf611f1e fix: fix an incorrect typing 2022-08-22 22:05:33 +08:00
YishiMichael
4dfe8aff86 refactor: refactor StringMobject 2022-08-22 21:52:48 +08:00
YishiMichael
8bd01d60e4 fix: add protect attribute to hash_seed 2022-08-22 17:08:58 +08:00
YishiMichael
c2a75e15cc refactor: refactor StringMobject 2022-08-22 16:55:46 +08:00
YishiMichael
19c757ec90 refactor: refactor StringMobject 2022-08-20 13:01:59 +08:00
YishiMichael
7ffc7b33f7 Refactor StringMobject and relevant classes 2022-08-07 23:57:54 +08:00
YishiMichael
28e4240475 Refactor StringMobject and relevant classes 2022-08-07 11:29:31 +08:00
YishiMichael
f434eb93e2 Refactor StringMobject and relevant classes 2022-08-07 00:50:29 +08:00
Grant Sanderson
69bb4f026c Make sure Window matches aspect ratio of Camera 2022-07-19 12:57:25 -07:00
Grant Sanderson
0406557b5c Make sure CLI resolution updates will work 2022-07-19 12:46:45 -07:00
Grant Sanderson
de7d9ce8c9 Don't let stroke width vary with zoom levels 2022-07-19 12:38:45 -07:00
Grant Sanderson
eff9e6f732 Animate resetting 2022-07-19 12:38:02 -07:00
Grant Sanderson
cc81cc5cf5 Move unit normal refreshing to VMobject 2022-07-19 12:37:34 -07:00
Grant Sanderson
af7c58dbe8 Import DEGREES 2022-07-19 12:36:50 -07:00
Grant Sanderson
7c4bb9cbbd Include upper endpoint on graphs 2022-07-19 12:36:24 -07:00
beccare
650d49c031 fixed broken link to community edition (versions) (#1840) 2022-07-17 18:08:44 +08:00
TonyCrane
3c7a38660a small fix 2022-06-28 09:16:06 +08:00
TonyCrane
606ee5e4f1 update docs 2022-06-28 09:13:41 +08:00
TonyCrane
844d139ed4 update changelog 2022-06-28 09:04:57 +08:00
YishiMichael
093af347aa Refactor LabelledString and relevant classes 2022-06-11 15:15:39 +08:00
YishiMichael
93265c7341 Remove a twice-defined method 2022-05-30 10:19:52 +08:00
Grant Sanderson
0d845d5bba Bubble tweaks 2022-05-29 16:37:53 -07:00
Grant Sanderson
dfa019fcde Make sure Mobject.become remaps any attributes pointing to family members appropriately. 2022-05-29 16:37:44 -07:00
Grant Sanderson
77309a634b Fix to embed insertion 2022-05-29 16:37:00 -07:00
Grant Sanderson
1b1ba606ed Remove unnecessary blend_func definition (which just sets it to the default value) 2022-05-29 16:36:46 -07:00
YishiMichael
a73bd5d4fe Fix popping bug 2022-05-29 16:48:30 +08:00
YishiMichael
97ac8c9953 Expand use elements 2022-05-29 16:26:40 +08:00
YishiMichael
bc939fdd5b Rename font to template 2022-05-28 23:18:56 +08:00
YishiMichael
3faa21cadd Add blank template 2022-05-28 22:44:30 +08:00
YishiMichael
bf530db2ed Add ctex_basic template 2022-05-28 22:01:36 +08:00
YishiMichael
f0447d7739 Small refactors on StringMobject and relevant classes 2022-05-28 21:43:37 +08:00
YishiMichael
59eba943e5 Resolve conflicts 2022-05-28 12:43:53 +08:00
YishiMichael
22a3bef670 Resolve conflicts 2022-05-28 12:40:29 +08:00
YishiMichael
cbffbfa019 Add back mismatched indices (#1820)
* Fix a logistic bug

* Add back mismatched indices
2022-05-25 14:12:54 +08:00
Grant Sanderson
07a8274cb1 Merge pull request #1821 from 3b1b/video-work
Video work
2022-05-24 15:20:07 -07:00
Grant Sanderson
83b4aa6b88 Let defaullt text alignment be decided in default_config 2022-05-24 15:16:59 -07:00
Grant Sanderson
117a34dc67 Change crosshair behavior 2022-05-23 11:08:08 -07:00
Grant Sanderson
ca523c8a5e Fix bubble direction 2022-05-23 11:07:51 -07:00
Grant Sanderson
ad58a9e6c1 Tiny refactor 2022-05-23 11:07:39 -07:00
YishiMichael
9386461d27 Add font attribute for Tex 2022-05-22 23:47:45 +08:00
YishiMichael
1596356385 Reuse hash_string function 2022-05-22 10:29:20 +08:00
YishiMichael
f0984487ea Construct TexTemplate class to convert tex to svg 2022-05-21 15:56:03 +08:00
Bill Xi
3108b49f55 Update coordinate_systems.py 2022-05-21 15:52:56 +08:00
YishiMichael
edca4a93fa Merge branch '3b1b:master' into refactor 2022-05-20 18:58:19 +08:00
YishiMichael
cfded00f13 Fix a logistic bug (#1815) 2022-05-20 18:56:40 +08:00
YishiMichael
26de7c9ce5 Fix a logistic bug 2022-05-20 18:49:38 +08:00
YishiMichael
49723f54cb Add necessary imports (#1804)
* Add necessary imports

* Add necessary imports

* Add necessary imports

* Add `from __future__ import annotations`
2022-05-19 22:07:06 +08:00
Grant Sanderson
cece830349 Merge branch 'master' of github.com:3b1b/manim into video-work 2022-05-17 09:19:47 -07:00
Grant Sanderson
cd240f2a80 Merge pull request #1795 from YishiMichael/refactor
Refactor StringMobject and relevant classes
2022-05-17 09:17:53 -07:00
Grant Sanderson
6decb0c32a Rename frame_rate -> fps 2022-05-14 17:47:31 -07:00
Grant Sanderson
fb3cf308df Make sure init_customization matches default_config.yml 2022-05-14 17:42:07 -07:00
Grant Sanderson
dd5d239971 Change convention for how camera_qualities are represented in default_config.yml 2022-05-14 17:29:07 -07:00
Grant Sanderson
25de729bb3 Only lock data for mobjects without updaters 2022-05-14 17:28:31 -07:00
Grant Sanderson
5f56778cdf Don't update frame during window closing on cell execution 2022-05-14 17:28:11 -07:00
Grant Sanderson
2e26d66454 Merge branch 'master' of github.com:3b1b/manim into video-work 2022-05-11 12:48:59 -07:00
Grant Sanderson
f741217c34 Make sure keyboard interrupted renders don't overwrite pre-existing video files 2022-05-11 12:48:08 -07:00
Grant Sanderson
11d19b6d57 Update frame at the end of each checkpoint_paste 2022-05-11 12:47:42 -07:00
Grant Sanderson
97643d788d Default to showing animation progress in embedded runs 2022-05-11 12:47:21 -07:00
Grant Sanderson
cef7c383a5 Add scene time to information that can be displayed with the appropriate key press 2022-05-11 12:46:56 -07:00
Grant Sanderson
0060a4860c Bug fix to VMobject.match_style 2022-05-11 12:46:15 -07:00
Grant Sanderson
4fdaeb1547 Fix(?) issue with numbers forgetting style info when resetting value 2022-05-11 12:45:51 -07:00
Grant Sanderson
48689c8c7b Add DecimalNumber.get_tex 2022-05-11 12:45:27 -07:00
Grant Sanderson
cd866573b5 Add about_edge argument to arrange_to_fit_width, etc. 2022-05-11 12:45:06 -07:00
Grant Sanderson
584e259b44 Bug fix for mirrored directories 2022-05-11 12:44:51 -07:00
YishiMichael
cdadaf8a8c Rename LabelledString to StringMobject 2022-05-06 22:09:58 +08:00
YishiMichael
7cf0e0ba10 Refactor LabelledString and relevant classes 2022-05-06 17:56:27 +08:00
YishiMichael
b509f62010 Refactor LabelledString and relevant classes 2022-05-06 16:43:20 +08:00
YishiMichael
642602155d [WIP] Refactor LabelledString and relevant classes 2022-05-05 23:03:02 +08:00
Grant Sanderson
41b811a5e7 Update frame on all play calls when skipping animations, so as to provide a rapid preview during scene loading 2022-05-04 21:22:48 -07:00
Grant Sanderson
93fc81ac9d Add show_progress option to checkpoint_paste 2022-05-04 21:22:22 -07:00
Grant Sanderson
d662971559 Larger cursor location label 2022-05-04 21:22:00 -07:00
Grant Sanderson
c4d452248a Move mirror output path logic to config.py 2022-05-04 21:21:49 -07:00
Grant Sanderson
181038e2f3 More curves to cross by default 2022-05-04 09:30:54 -07:00
YishiMichael
511a3aab3d [WIP] Remove comments 2022-05-04 22:18:19 +08:00
YishiMichael
1cb7401141 [WIP] Refactor LabelledString and relevant classes 2022-05-04 21:56:13 +08:00
Grant Sanderson
a9a151d4ef Have presenter mode hold before first play call 2022-05-03 12:45:16 -07:00
Grant Sanderson
22c5e79f5f Some cleanups to the way scenes end 2022-05-03 12:41:44 -07:00
Grant Sanderson
a87d3b5f59 Add Mobject.arrange_to_fit_dim 2022-05-03 12:40:43 -07:00
YishiMichael
ab8f78f40f [WIP] Refactor LabelledString and relevant classes 2022-05-03 23:39:37 +08:00
Grant Sanderson
a6fcfa3b40 Add time_span option to Animation 2022-05-02 11:40:42 -07:00
Grant Sanderson
fddb0b29e1 Remove unnecessary import 2022-05-02 11:38:58 -07:00
Grant Sanderson
57b7af3bf1 Remove old-style method building from ExampleScenes 2022-05-02 11:13:18 -07:00
Grant Sanderson
a09c440281 Slight tweaks to crosshair 2022-05-02 11:13:05 -07:00
Grant Sanderson
c019210015 Have InteractiveScene ignore state of crosshair and selection_highlight 2022-05-02 11:12:04 -07:00
Grant Sanderson
75e1cff579 Reorganize how scene state is managed 2022-05-02 11:11:18 -07:00
Grant Sanderson
feab79c260 Get rid of overly complicated anims_from_play_args (which means old style method building is no longer supported) 2022-05-02 11:10:57 -07:00
Grant Sanderson
308aadcec5 Make show_animation_progress effective 2022-05-02 11:09:09 -07:00
YishiMichael
03cb42ba15 [WIP] Refactor LabelledString and relevant classes 2022-05-02 22:40:06 +08:00
Grant Sanderson
4a8e8e5447 Clear later checkpoints 2022-05-01 15:31:42 -04:00
Grant Sanderson
602fbd1a9f Fix -e for first line of scene 2022-05-01 15:31:31 -04:00
Grant Sanderson
33ffd4863a Add crosshair 2022-05-01 15:31:07 -04:00
Grant Sanderson
6a664ece78 Rename InteractiveScene.colors -> InteractiveScene.palette_colors 2022-04-28 19:16:11 -04:00
Grant Sanderson
354030464e Bug patch Tex sometimes rendering black 2022-04-28 19:15:53 -04:00
Grant Sanderson
a791a82111 Bug fix 2022-04-28 19:15:26 -04:00
Grant Sanderson
7f94a401a8 Wait on start for presenter mode 2022-04-28 12:15:00 -06:00
Grant Sanderson
ed5a435852 Default to more highlight layers 2022-04-28 12:14:49 -06:00
Grant Sanderson
a4b38fd420 Clean up DecimalNumber constructor 2022-04-28 12:14:36 -06:00
Grant Sanderson
c1b222c233 Set default buff for is_point_touching to 0 2022-04-28 11:59:56 -06:00
Grant Sanderson
5d59f945ca FillArrow tweak 2022-04-28 11:59:38 -06:00
Grant Sanderson
ac08963fef Have selection_highlight refresh with an updater 2022-04-28 11:59:21 -06:00
Grant Sanderson
e83ad785ca Handle quitting during scene more gracefully 2022-04-27 11:19:44 -07:00
Grant Sanderson
52259af5df Don't show animation progress bar by default 2022-04-27 11:19:20 -07:00
Grant Sanderson
7c233123a1 Tweaks and fixes to InteractiveScene 2022-04-27 09:55:46 -07:00
Grant Sanderson
c311204993 Tweaks to VHighlight 2022-04-27 09:55:29 -07:00
Grant Sanderson
2b104a46fd Add error message to LatexError 2022-04-27 09:55:15 -07:00
Grant Sanderson
d75439a60e Hacky fix to lambda namespace issues with IPython embeds 2022-04-27 09:54:29 -07:00
Grant Sanderson
1b589e336f Add checkpoints to Scene 2022-04-27 09:53:56 -07:00
Grant Sanderson
ec9ed32d78 Organize get_ancestors from top to bottom 2022-04-27 09:53:23 -07:00
Grant Sanderson
0e45b41fea Match updaters in Mobject.become 2022-04-27 09:52:44 -07:00
Grant Sanderson
c498b88750 Small tweaks to Mobject.looks_identical for marginal speed 2022-04-27 09:52:27 -07:00
Grant Sanderson
2dcc989bb4 (whitespace) 2022-04-27 09:51:43 -07:00
YishiMichael
065900c6ac Some refactors 2022-04-27 23:04:24 +08:00
YishiMichael
69db53d612 Merge branch '3b1b:master' into refactor 2022-04-26 10:07:40 +08:00
Grant Sanderson
b920e7be7b Rewrite remove_list_redundancies based on (ordered) dicts 2022-04-25 10:45:35 -07:00
Grant Sanderson
3584926036 Merge pull request #1802 from 3b1b/video-work
Video work
2022-04-25 10:29:02 -07:00
Grant Sanderson
4c1210b3ab Add smarter default radius to round_corners 2022-04-25 10:26:29 -07:00
Grant Sanderson
aaea3f40f6 Don't copy Mobject attrs which are mobject but not family members 2022-04-25 10:26:07 -07:00
Grant Sanderson
d6bf9f00a1 Slight tweaks 2022-04-25 10:25:35 -07:00
Grant Sanderson
42d1f48c60 Only leave wait notes in presenter mode 2022-04-25 09:55:49 -07:00
Grant Sanderson
01f0dd30d0 Have Scene.remove look at extended ancestry 2022-04-25 09:55:00 -07:00
Grant Sanderson
40b432a29b Add extended option to Mobject.get_ancestors 2022-04-25 09:54:32 -07:00
Grant Sanderson
d43b5c9bdc Fix shift + s gather selection bug 2022-04-24 13:32:26 -07:00
Grant Sanderson
f2b4245c13 Slight speed-up to InteractiveScene.gather_selection 2022-04-24 13:24:55 -07:00
Grant Sanderson
e49e4b8373 Speed-ups to Mobject.copy 2022-04-24 13:24:20 -07:00
Grant Sanderson
66f695a1ed Ensure ShaderWrapper.copy copies uniforms which are numpy arrays 2022-04-24 13:23:30 -07:00
Grant Sanderson
cc8922155d Make sure Scene.remove clears internal mobject list of family members of args 2022-04-24 13:23:02 -07:00
Grant Sanderson
6310e2fb64 Clean up Scene.remove function, delete restructure_list_to_exclude_certain_family_members 2022-04-24 10:29:31 -07:00
Grant Sanderson
db884b0a67 Add Mobject.get_ancestors 2022-04-24 10:29:02 -07:00
Grant Sanderson
efe051b8e1 Revert to -e to create a new temporary file, rather than writing over the original 2022-04-24 10:28:53 -07:00
Grant Sanderson
205116b8ce Fix refresh_selection_highlight 2022-04-23 18:52:44 -07:00
Grant Sanderson
bd2dce0830 When scene saves state, have it only copy mobjects which have changed 2022-04-23 18:52:26 -07:00
Grant Sanderson
3ae0a4e81b Add equality for ShaderWrapper 2022-04-23 18:51:03 -07:00
Grant Sanderson
c3c5717dde Add Mobject.looks_identical 2022-04-23 18:50:45 -07:00
YishiMichael
b8efdea6ec Merge pull request #2 from YishiMichael/master
Update 'refactor' branch
2022-04-24 08:30:38 +08:00
YishiMichael
97edc2d6cf Merge branch 'master' into refactor 2022-04-24 08:26:22 +08:00
YishiMichael
30e33b1baa Merge branch 'refactor' into master 2022-04-24 08:24:27 +08:00
Grant Sanderson
304cf88451 Merge pull request #1797 from 3b1b/video-work
Video work
2022-04-23 10:18:25 -07:00
Grant Sanderson
d9475a6860 Remove unnecessary imports 2022-04-23 10:16:48 -07:00
Grant Sanderson
902c2c002d Slight copy refactor 2022-04-23 10:16:35 -07:00
Grant Sanderson
587bc4d0bd Add necessary import 2022-04-23 10:16:23 -07:00
Grant Sanderson
d733687834 Have -e write over original source file, then correct 2022-04-23 10:16:11 -07:00
Grant Sanderson
0fd8491c51 Move Command + z and Command + shift + z behavior to Scene 2022-04-23 09:20:44 -07:00
Grant Sanderson
753ef3b74a Merge pull request #1796 from 3b1b/video-work
Improved embed, fixes to Mobject.copy
2022-04-23 09:16:46 -07:00
Grant Sanderson
2ba9243067 Merge branch 'master' of github.com:3b1b/manim into video-work 2022-04-23 09:03:53 -07:00
Grant Sanderson
669182944d Merge pull request #1789 from YishiMichael/master
Sort imports
2022-04-23 08:53:14 -07:00
YishiMichael
e085c2e214 Refactor LabelledString and relevant classes 2022-04-23 17:17:43 +08:00
Grant Sanderson
f70e91348c Remove Mobject.interaction_allowed, in favor of using _is_animating for multiple purposes 2022-04-22 23:14:57 -07:00
Grant Sanderson
754316bf58 Factor out event handling 2022-04-22 23:14:19 -07:00
Grant Sanderson
04bca6cafb Refresh static mobjects on undo's and redo's 2022-04-22 23:14:00 -07:00
Grant Sanderson
62289045cc Fix animating Mobject.restore bug 2022-04-22 19:42:47 -07:00
Grant Sanderson
3961005fd7 Rename is_movable to interaction_allowed 2022-04-22 19:17:39 -07:00
Grant Sanderson
7b342a2759 Remove unnecessary lines 2022-04-22 19:03:00 -07:00
Grant Sanderson
59506b89cc Revert to original copying scheme 2022-04-22 19:02:44 -07:00
Grant Sanderson
71c14969df Refactor -e flag hackiness 2022-04-22 15:41:23 -07:00
Grant Sanderson
b2e0aee93e Get rid of ctrl + shift + e embed option 2022-04-22 11:46:18 -07:00
Grant Sanderson
cf466006fa Add undo and redo stacks for scene, together with Command + Z functionality 2022-04-22 11:44:28 -07:00
Grant Sanderson
4d8698a0e8 Add Mobject.deserialize 2022-04-22 11:42:26 -07:00
Grant Sanderson
b9751e9d06 Add cursor location label 2022-04-22 10:17:29 -07:00
Grant Sanderson
bb7fa2c8aa Update behavior of -e flag to take in (optional) strings as inputs 2022-04-22 10:17:15 -07:00
Grant Sanderson
e0f5686d66 Fix bug with trying to close window during embed 2022-04-22 10:16:43 -07:00
Grant Sanderson
581228b08f Have scene keep track of a map from mobject ids to mobjects for all it's ever seen 2022-04-22 08:33:57 -07:00
Grant Sanderson
2737d9a736 Have BlankScene inherit from InteractiveScene 2022-04-22 08:33:18 -07:00
Grant Sanderson
c96bdc243e Update Scene.embed to play nicely with gui interactions 2022-04-22 08:16:17 -07:00
Grant Sanderson
5927f6a1cd Default to "" for scene_file_writer output dir 2022-04-22 08:14:29 -07:00
Grant Sanderson
1b2460f02a Remove refresh_shader_wrapper_id from Mobject.become 2022-04-22 08:14:05 -07:00
YishiMichael
37075590b5 Sort imports 2022-04-22 16:42:45 +08:00
YishiMichael
bf5cec7dba Revert some files 2022-04-22 15:41:57 +08:00
YishiMichael
f8c8a399c9 Revert some files 2022-04-22 15:31:13 +08:00
YishiMichael
f226aa7314 Merge branch '3b1b:master' into master 2022-04-22 15:02:59 +08:00
Grant Sanderson
b4b72d1b68 Allow stretched-resizing 2022-04-21 15:31:46 -07:00
Grant Sanderson
78a7078772 Move saved mobject directory logic to scene_file_writer.py 2022-04-21 15:02:11 -07:00
Grant Sanderson
4caa033323 Allow for sweeping selection 2022-04-21 15:01:54 -07:00
Grant Sanderson
3a60ab144b Remove saved mobject directory logic from InteractiveScene 2022-04-21 15:01:30 -07:00
Grant Sanderson
f53f202dcd A few small cleanups 2022-04-21 15:00:58 -07:00
Grant Sanderson
9d5e2b32fa Add VHighlight 2022-04-21 14:32:39 -07:00
Grant Sanderson
fe3e10acd2 Updates to copying based on pickle serializing 2022-04-21 14:32:27 -07:00
Grant Sanderson
c04615c4e9 In Mobject.set_uniforms, copy uniforms that are numpy arrays 2022-04-21 14:30:39 -07:00
Grant Sanderson
6474e25fcd A few small updates to InteractiveScene 2022-04-21 00:28:37 -07:00
Grant Sanderson
996d71c49e Add fallback for Mobject copying for unpicklable objects 2022-04-20 22:53:49 -07:00
Grant Sanderson
d24b8ff48f Merge branch 'master' into master 2022-04-20 22:40:11 -07:00
Grant Sanderson
485a4ca33a Merge pull request #1794 from 3b1b/video-work
InteractiveScene, etc.
2022-04-20 22:22:09 -07:00
Grant Sanderson
cc563bf5e2 Merge pull request #1787 from lakscastro/patch-1
Remove unused import
2022-04-20 22:19:17 -07:00
Grant Sanderson
19881f3e2d Remove pickle from requirements (as it's in standard library) 2022-04-20 22:17:25 -07:00
Grant Sanderson
a0507c5277 Update to use new keybinding 2022-04-20 22:07:28 -07:00
Grant Sanderson
1b009a4b03 Simplify Mobject.copy to just use pickle serialization 2022-04-20 22:07:10 -07:00
Grant Sanderson
c3afc84bfe Add a rudimentary InteractiveScene to allow for Mobject editing in a GUI fashion 2022-04-20 21:54:16 -07:00
Grant Sanderson
e579f4c955 Add pickle and pyperclip to requirements 2022-04-20 21:53:25 -07:00
Grant Sanderson
4f2e3456e2 Raise Specific exception type when running into latex errors 2022-04-20 21:53:05 -07:00
Grant Sanderson
47636686cb Cleanup extract_mobject_family_members 2022-04-20 21:51:56 -07:00
Grant Sanderson
eae7dbbe6e Change default transparent background codec to be prores 2022-04-20 21:51:36 -07:00
Grant Sanderson
a3579eab41 Have SceneFileWriter handle a location for saved mobjects 2022-04-20 21:51:18 -07:00
Grant Sanderson
5a34ca1fba Add MANIM_COLORS 2022-04-20 21:50:44 -07:00
Grant Sanderson
68e2909af1 Mild cleanup to Scene interactivity 2022-04-20 21:50:37 -07:00
Grant Sanderson
777b6d3778 Allow for saving and loading mobjects from file at the Scene level 2022-04-20 21:49:57 -07:00
Grant Sanderson
97400a5cf2 Update Scene.save_state and Scene.restore 2022-04-20 21:49:38 -07:00
Grant Sanderson
cb768c26a0 Add functionality for recovering mobjects from their ids (to enable copying and pasting) 2022-04-20 21:48:58 -07:00
Grant Sanderson
fdeab8ca95 Make sure AnimationGroup plays nicely with setting mobject animation status 2022-04-20 21:47:47 -07:00
Grant Sanderson
b09e6916dc Remove VMobject.get_highlight 2022-04-20 21:47:12 -07:00
Grant Sanderson
a0c46ef3bf Have set_animating_status recurse over family 2022-04-20 21:46:43 -07:00
Grant Sanderson
4839037503 Update Mobject.make_movable to recurse over family 2022-04-20 21:44:42 -07:00
Grant Sanderson
f636199d9a Add Mobject.get_all_corners 2022-04-20 21:43:16 -07:00
Grant Sanderson
50f5d20cc3 Allow for saving and loading mobjects from file 2022-04-20 21:42:59 -07:00
Grant Sanderson
2dd2fb500e Remove Mobject.get_highlight 2022-04-20 21:42:22 -07:00
Grant Sanderson
c1716895c0 Add Mobject.is_touching 2022-04-20 21:42:07 -07:00
Grant Sanderson
135f68de35 Update Mobject.is_point_touching 2022-04-20 21:41:47 -07:00
YishiMichael
8852921b3d Refactor double brace parsing 2022-04-18 19:44:32 +08:00
YishiMichael
cbb7e69f68 Refactor LabelledString and relevant classes 2022-04-18 18:47:57 +08:00
YishiMichael
0e0244128c Refactor LabelledString and relevant classes 2022-04-17 13:57:03 +08:00
YishiMichael
e9298c5faf Remove sorting key 2022-04-16 16:31:55 +08:00
YishiMichael
4f5173b633 Adjust typing 2022-04-16 15:45:55 +08:00
YishiMichael
58127e7511 import Iterables 2022-04-16 15:34:32 +08:00
YishiMichael
b387bc0c95 Adjust typings 2022-04-16 15:29:23 +08:00
YishiMichael
0406ef70bb Adjust typings for sounds.py and tex_file_writing.py 2022-04-16 14:37:28 +08:00
YishiMichael
654da85cf6 Adjust typings 2022-04-16 14:09:59 +08:00
YishiMichael
bc18894040 Remove empty results in LabelledString.select_parts 2022-04-16 13:59:42 +08:00
YishiMichael
ac4620483c Support flexible selector types 2022-04-16 12:53:43 +08:00
YishiMichael
4690edec3e Refactor LabelledString 2022-04-16 00:24:55 +08:00
YishiMichael
a1e77b0ce2 Refactor LabelledString 2022-04-15 23:58:06 +08:00
YishiMichael
dbefc3b256 Refactor LabelledString 2022-04-15 23:30:42 +08:00
YishiMichael
14dfd776dc Refactor LabelledString 2022-04-15 23:26:41 +08:00
YishiMichael
0a810bb4f1 Refactor LabelledString 2022-04-15 22:54:06 +08:00
YishiMichael
09952756ce Support hashing Color type in hash_obj 2022-04-15 13:48:24 +08:00
YishiMichael
020bd87271 Add back base_color attribute 2022-04-15 13:27:50 +08:00
Grant Sanderson
50565fcd7a Change the way changing-vs-static mobjects are tracked
Previously, Camera would keep track of which mobjects are supposed to be "static", so that it could generated their render groups once and not repeat unnecessarily. This had an awkward dependence where Scene would then need to keep track of which mobjects should and should not be considered static.

This update pushes that logic to the Mobject level, where it keeps track internally of whether it's being animated, has an updater, or can be moved around by the mouse.
2022-04-14 16:27:58 -07:00
Grant Sanderson
5a91c73b23 Merge branch 'master' of github.com:3b1b/manim into video-work 2022-04-14 14:40:14 -07:00
Grant Sanderson
5e49f20294 Add VMobject.get_highlight 2022-04-14 14:37:50 -07:00
Grant Sanderson
29816fa74c Add get_highlight 2022-04-14 14:37:38 -07:00
Grant Sanderson
95f56f5e80 Be sure has_updater_status is properly updated after clear 2022-04-14 14:37:12 -07:00
Grant Sanderson
6a01e36b36 Minor cleanup 2022-04-14 14:36:17 -07:00
YishiMichael
4c324767bd Recover Mobject.scale method 2022-04-15 00:55:02 +08:00
YishiMichael
eec6b01a72 Refactor labelled_string.py 2022-04-14 21:07:31 +08:00
YishiMichael
0c1e5b337b Support passing in complete environment tags 2022-04-13 22:51:55 +08:00
TonyCrane
bda7f98d2e release: ready to release v1.6.1 2022-04-13 10:36:38 +08:00
TonyCrane
9d74e8bce3 docs: update changelog for #1783 #1785 #1788 #1791 2022-04-13 10:34:59 +08:00
YishiMichael
bff9f74b04 Prevent from passing an empty string 2022-04-12 23:19:10 +08:00
Grant Sanderson
845ee83f71 Merge pull request #1791 from 3b1b/fix_image_mobject
Fix `ImageMobject` by overriding `set_color` method
2022-04-12 08:13:01 -07:00
YishiMichael
42444d090e Add missing import 2022-04-12 21:09:25 +08:00
YishiMichael
b11ce7ff7c Adjust annotation 2022-04-12 20:22:13 +08:00
YishiMichael
296ab84b46 Adjust annotation 2022-04-12 20:21:25 +08:00
TonyCrane
55684af27d fix: fix ImageMobject by overriding set_color method 2022-04-12 20:20:03 +08:00
YishiMichael
93790cde64 Add import annotations statement 2022-04-12 20:03:48 +08:00
YishiMichael
fbebaf0c75 Sort imports 2022-04-12 19:39:19 +08:00
YishiMichael
9ef9961d0e Sort imports 2022-04-12 19:19:59 +08:00
YishiMichael
0cf3199578 Adjust return type 2022-04-12 11:26:19 +08:00
YishiMichael
f307c2a298 Add type annotations for color.py 2022-04-12 11:13:05 +08:00
Grant Sanderson
859680d5ab Merge pull request #1788 from 3b1b/interpolate-fix
Interpolate fix
2022-04-11 10:51:05 -07:00
Grant Sanderson
dc4b9bc93c Use outer_interpolate for NumberLine.number_to_point 2022-04-11 10:47:26 -07:00
Grant Sanderson
705f1a528b Separate functionality of ordinary linear interpolation from that using np.outer on arrays 2022-04-11 10:47:11 -07:00
Grant Sanderson
e8ac25903e Add case for zero vectors on angle_between_vectors 2022-04-11 09:59:24 -07:00
Grant Sanderson
773520bcd9 Merge pull request #1785 from YishiMichael/master
Fix bug when handling multi-line tex
2022-04-11 09:52:51 -07:00
Grant Sanderson
d26b8a826c Merge pull request #1783 from EbbDrop/more-special-string
Added a \overset as a special string
2022-04-11 09:50:33 -07:00
YishiMichael
12bfe88f40 Some refactors 2022-04-11 23:44:33 +08:00
lask
31cbf2d905 Remove unused improt 2022-04-10 20:00:10 -03:00
YishiMichael
36d62ae1a3 Add regex parameter 2022-04-10 09:23:53 +08:00
YishiMichael
e23f667c3d Fix bug when handling multi-line tex 2022-04-10 08:36:13 +08:00
EbbDrop
2277679111 Added a \overset as a special string 2022-04-08 23:06:08 +02:00
TonyCrane
9d7db7aacd release: ready to release v1.6.0 2022-04-07 11:00:43 +08:00
TonyCrane
e8430b38b2 docs: update changelog for #1781 2022-04-07 10:57:21 +08:00
鹤翔万里
1f32a9e674 Some fix (#1781)
* fix: reduce warning from numpy

* fix: fix ControlsExample
2022-04-07 10:50:18 +08:00
TonyCrane
d31f3df5af docs: update changelog for #1779 #1780 2022-04-07 10:05:04 +08:00
鹤翔万里
e9bf13882e Merge pull request #1780 from YishiMichael/master
Add support for `substring` and `case_sensitive` parameters
2022-04-07 09:58:39 +08:00
YishiMichael
3550108ff7 Handle out-of-bound spans 2022-04-07 09:48:44 +08:00
Grant Sanderson
d7bdcab161 Tiny formatting change 2022-04-06 13:04:44 -07:00
Grant Sanderson
3b847da9ea Update parent updater status when adding updaters 2022-04-06 13:04:05 -07:00
Grant Sanderson
217c1d7bb0 Add start angle option to Circle 2022-04-06 13:03:36 -07:00
YishiMichael
557707ea75 Support substring and case_sensitive parameters 2022-04-07 00:46:41 +08:00
Grant Sanderson
13c731e166 Merge pull request #1779 from YishiMichael/master
Refactor `LabelledString` and relevant classes
2022-04-06 08:53:23 -07:00
YishiMichael
d349c9283d Merge branch 'master' of https://github.com/YishiMichael/manim 2022-04-06 23:17:19 +08:00
YishiMichael
18963fb9fe Some refactors on LabelledString 2022-04-06 23:16:59 +08:00
YishiMichael
a69c9887f9 Merge branch '3b1b:master' into master 2022-04-06 22:39:26 +08:00
YishiMichael
93f8d3f1ca Some refactors on LabelledString 2022-04-06 22:38:33 +08:00
TonyCrane
e4ccbdfba9 docs: update changelog since v1.5.0 2022-04-06 11:14:45 +08:00
YishiMichael
fc97bfb647 Merge branch '3b1b:master' into master 2022-04-05 22:28:39 +08:00
YishiMichael
f9d8a76767 Remove unnecessary raise statement (#1778)
* Fix typo

* Remove unnecessary raise statement
2022-04-05 22:22:59 +08:00
YishiMichael
55a91a2354 Remove unnecessary raise statement 2022-04-05 22:16:26 +08:00
YishiMichael
50ffcbc5c7 Merge branch '3b1b:master' into master 2022-04-05 21:10:45 +08:00
YishiMichael
b764791258 Fix typo (#1777) 2022-04-05 14:04:26 +08:00
YishiMichael
7f616987a3 Fix typo 2022-04-05 14:01:07 +08:00
Grant Sanderson
648855dae0 Merge pull request #1772 from YishiMichael/master
Construct LabelledString base class for MarkupText and MTex
2022-04-04 10:01:13 -07:00
YishiMichael
974d9d5ab0 Avoid empty spans 2022-04-04 14:53:40 +08:00
YishiMichael
3c3264d7d6 Support passing in spans directly 2022-04-02 22:42:19 +08:00
鹤翔万里
39673a80d7 fix: add missing import of annotations 2022-04-02 22:00:02 +08:00
YishiMichael
84c56b3624 Fix typo 2022-03-31 18:11:37 +08:00
YishiMichael
dc816c9f8d Improve algorithm 2022-03-31 18:08:10 +08:00
YishiMichael
d5ab9a91c4 Reorganize files 2022-03-31 16:15:58 +08:00
YishiMichael
106f2a3837 Fix shallow copying bug 2022-03-31 11:36:50 +08:00
YishiMichael
724a500cc6 Fix shallow copying bug 2022-03-31 11:20:42 +08:00
YishiMichael
461500637e Fix type bug 2022-03-31 10:57:25 +08:00
YishiMichael
fc4f649570 Fix bugs brought by empty strings 2022-03-31 10:36:14 +08:00
Grant Sanderson
e74cb85182 Remove unnecessary close of ProgressDisplay 2022-03-30 13:14:29 -07:00
Grant Sanderson
df2d465140 Add specific euler angle getters 2022-03-30 13:14:09 -07:00
YishiMichael
852da9ac2a Merge branch 'master' of https://github.com/YishiMichael/manim 2022-03-30 22:09:54 +08:00
YishiMichael
637d779190 Fix empty zipping bug 2022-03-30 22:09:26 +08:00
YishiMichael
9bbbed3a83 Remove comment 2022-03-30 22:04:10 +08:00
YishiMichael
1cde28838f Merge branch '3b1b:master' into master 2022-03-30 22:02:23 +08:00
YishiMichael
a8039d803e Rename file 2022-03-30 21:58:27 +08:00
YishiMichael
0add9b6e3a Rename file 2022-03-30 21:57:27 +08:00
YishiMichael
c5ec47b0e9 Refactor LabelledString 2022-03-30 21:53:00 +08:00
Grant Sanderson
769a4bbaf9 Merge pull request #1770 from 3b1b/video-work
Small camera/3d updates
2022-03-29 20:35:33 -07:00
Grant Sanderson
0f8d7ed597 Add VPrism, and refactor VCube 2022-03-29 20:34:14 -07:00
Grant Sanderson
2a7a7ac518 Add getter and setter for joint_type 2022-03-29 20:28:48 -07:00
Grant Sanderson
0610f331a4 Add get/set field_of_view for camera frame 2022-03-29 20:20:41 -07:00
Grant Sanderson
a0ba9c8b30 Fix CameraFrame.get_euler_angles to match conventions with set_euler_angles 2022-03-29 19:21:12 -07:00
YishiMichael
7e8b3a4c6b Refactor LabelledString 2022-03-29 23:38:06 +08:00
Grant Sanderson
393f77cb03 Merge pull request #1766 from sunkisser/SVGfeedback
Give the user feedback for SVGs that take a while
2022-03-28 09:30:00 -07:00
YishiMichael
82c972b946 Remove saxutils.unescape process 2022-03-28 19:31:19 +08:00
YishiMichael
89e139009b Remove an error raising 2022-03-28 19:17:40 +08:00
YishiMichael
45faa9063b Add items for hash_seed 2022-03-28 19:02:50 +08:00
YishiMichael
0e31ff12e2 Tiny fix for TransformMatchingString 2022-03-28 18:54:43 +08:00
YishiMichael
473aaea399 Construct LabelledString 2022-03-28 17:55:50 +08:00
Sunkisser
c4ea794107 use tqdm to display progress bar for long running SVG triangulations 2022-03-28 03:30:10 +00:00
Sunkisser
cfba6c431f revert previous changes - we will refactor using tqdm 2022-03-28 02:55:21 +00:00
鹤翔万里
e11c5def63 style: some style fixes 2022-03-28 08:05:41 +08:00
Sunkisser
a3e4246938 use log.debug and display idx+1 2022-03-27 21:59:49 +00:00
YishiMichael
305c6e6ee9 Resolve conflict for #1765 2022-03-27 15:33:51 +08:00
YishiMichael
3b01ec48e6 Refactor MTex 2022-03-27 14:44:50 +08:00
Sunkisser
969aa82f04 user feedback for SVGs that take a while 2022-03-26 23:43:11 +00:00
YishiMichael
e44a2fc8c6 Refactor MTex 2022-03-27 00:29:22 +08:00
YishiMichael
9ac1805e7e Refactor MTex 2022-03-26 20:52:28 +08:00
YishiMichael
6ad8636fab Adjust some typings (#1765)
* Adjust some typings

* Adjust typings
2022-03-23 14:17:34 +08:00
YishiMichael
4a03d196a6 Adjust typings 2022-03-23 13:34:30 +08:00
YishiMichael
519e2f4f1e Adjust some typings 2022-03-23 12:21:40 +08:00
Grant Sanderson
aefde2969f Merge pull request #1764 from 3b1b/video-work
Video work
2022-03-22 11:41:24 -07:00
Grant Sanderson
b7a3201fb3 Reorder imports 2022-03-22 11:31:52 -07:00
Grant Sanderson
a9349057ad Merge branch 'master' of github.com:3b1b/manim into video-work 2022-03-22 11:30:25 -07:00
Grant Sanderson
e812b99594 Re-add necessary imports 2022-03-22 11:07:26 -07:00
Grant Sanderson
0c8b333a42 Merge pull request #1736 from TonyCrane/master
Add type hints according to PEP 484 and PEP 604
2022-03-22 11:05:10 -07:00
Grant Sanderson
f690164087 Merge branch 'master' into master 2022-03-22 11:00:33 -07:00
Grant Sanderson
9d0cc810c5 Make panning more sensitive to mouse movements 2022-03-22 10:36:48 -07:00
Grant Sanderson
8b1f0a8749 Refactor Mobject.set_rgba_array_by_color 2022-03-22 10:35:49 -07:00
Grant Sanderson
c0b7b55e49 Use stroke_color to init arrow 2022-03-22 10:35:34 -07:00
Grant Sanderson
41b52c6117 Merge pull request #1751 from YishiMichael/master
Refactor Text with the latest manimpango
2022-03-22 09:50:43 -07:00
YishiMichael
e5ce0ca286 Reorganize methods 2022-03-22 20:46:35 +08:00
YishiMichael
a8c2a9fa3f Clean up code 2022-03-21 23:11:37 +08:00
YishiMichael
cabc1322d6 Clean up code 2022-03-21 23:06:47 +08:00
YishiMichael
c51811d2f1 Except IndexError for MTex.get_part_by_tex 2022-03-21 22:45:06 +08:00
Grant Sanderson
7bf3615bb1 Refactor rotation methods to use scipy.spatial.transform.Rotation 2022-03-18 17:11:08 -07:00
Grant Sanderson
1872b0516b Normalize rotation axis 2022-03-18 17:10:16 -07:00
Grant Sanderson
625460467f Refactor CameraFrame to use scipy.spatial.transform.Rotation 2022-03-18 16:06:15 -07:00
Grant Sanderson
e19f35585d Add GlowDots, analogous to GlowDot 2022-03-17 12:00:49 -07:00
Grant Sanderson
66819f5dbc Add 2d and 3d pianos 2022-03-17 12:00:29 -07:00
Grant Sanderson
f249da95fb Add a basic Prismify to turn a flat VMobject into something with depth 2022-03-17 12:00:10 -07:00
Grant Sanderson
bb3bd41605 Merge pull request #1762 from widcardw/patch-1
Fix the width of riemann rectangles
2022-03-17 09:06:42 -07:00
widcardw
67f8007764 Fix the width of riemann rectangles 2022-03-17 14:10:30 +08:00
YishiMichael
2a0709664d Add explicit return statement 2022-03-17 11:33:53 +08:00
YishiMichael
de46df78dc Modify warning message 2022-03-17 10:58:41 +08:00
Grant Sanderson
bd6c731e67 Allow CoordinateSystem.coords_to_point to work on arrays of coords 2022-03-16 12:24:22 -07:00
Grant Sanderson
c3e13fff05 Allow Numberline.number_to_point to work on an array of numbers 2022-03-16 12:24:03 -07:00
Grant Sanderson
bf2d9edfe6 Allow interpolate to work on an array of alpha values 2022-03-16 12:23:51 -07:00
Grant Sanderson
fa38b56fd8 Bug fix in cases where empty array is passed to shader 2022-03-16 12:23:11 -07:00
Grant Sanderson
dfbbb34035 Merge pull request #1757 from TurkeyBilly/patch-7
Reorganize getters for ParametricCurve
2022-03-06 09:27:22 -08:00
Bill Xi
0cef9a1e61 Reorganize getters for ParametricCurve 2022-03-06 13:54:42 +08:00
YishiMichael
2d764e12f4 fix char escaping bug 2022-03-03 21:09:05 +08:00
YishiMichael
d744311f15 add warning for slicing methods 2022-03-03 20:47:44 +08:00
YishiMichael
11af9508f2 add back get_parts_by_text, get_part_by_text methods 2022-03-03 20:38:15 +08:00
YishiMichael
a227ffde05 PEP8: reorder imports 2022-03-02 20:28:26 +08:00
YishiMichael
e0b0ae280e Allow passing strings to local_configs 2022-03-02 19:59:14 +08:00
YishiMichael
fce38fd8a5 Modify default value of apply_space_chars 2022-03-02 19:52:45 +08:00
YishiMichael
52a99a0c49 Add global_config, local_configs params 2022-03-02 19:34:56 +08:00
YishiMichael
956e3a69c7 Refactor Text 2022-03-02 18:38:24 +08:00
YishiMichael
95a3ac6876 Refactor Text 2022-02-26 20:36:32 +08:00
YishiMichael
b06a5d3f23 Refactor Text 2022-02-26 20:31:26 +08:00
YishiMichael
fa8962e024 Refactor Text 2022-02-20 23:35:48 +08:00
YishiMichael
0a4c4d5849 Merge branch '3b1b:master' into master 2022-02-20 23:34:10 +08:00
YishiMichael
e879da32d5 Specify UTF-8 encoding for tex files (#1748) 2022-02-17 19:09:55 +08:00
YishiMichael
6b12bc2f5e Merge branch '3b1b:master' into master 2022-02-17 19:06:17 +08:00
YishiMichael
4aeccd7769 Specify UTF-8 encoding for tex files 2022-02-17 19:03:45 +08:00
TonyCrane
4fbe948b63 style: insert an empty line after import 2022-02-16 21:08:25 +08:00
TonyCrane
05bee011d2 chore: update type hint of SVGMobject 2022-02-16 20:37:07 +08:00
鹤翔万里
37b548395c Merge branch 'master' into master 2022-02-16 20:30:53 +08:00
TonyCrane
4356c42e00 release: ready to release v1.5.0 2022-02-16 12:01:03 +08:00
TonyCrane
aea79be6cc workflow: only build wheels for python 3.6+ 2022-02-16 11:59:33 +08:00
TonyCrane
a08e9b01de Merge branch 'update' 2022-02-16 11:47:46 +08:00
TonyCrane
9f3b404df6 resolve conflict and add type hints for it 2022-02-16 11:46:55 +08:00
TonyCrane
8ef42fae24 Merge branch 'master' of https://github.com/3b1b/manim 2022-02-16 11:21:20 +08:00
TonyCrane
6be6bd3075 docs: change the style of changelog 2022-02-16 11:20:08 +08:00
TonyCrane
a33eac7aa8 docs: update changelog for #1742 #1744 #1745 #1746 2022-02-16 11:17:37 +08:00
Grant Sanderson
9d6a28bc29 Merge pull request #1746 from 3b1b/video-work
Change interaction-to-embed keybinding
2022-02-15 10:14:18 -08:00
Grant Sanderson
06405d5758 Merge branch 'master' of github.com:3b1b/manim into video-work 2022-02-15 10:11:35 -08:00
Grant Sanderson
46e356e791 Change keyboard shortcut to drop into an embedding to be ctrl+shift+e 2022-02-15 10:10:57 -08:00
Grant Sanderson
97ca42d454 Merge pull request #1745 from YishiMichael/master
Reorganize inheriting order and refactor SVGMobject
2022-02-15 10:05:53 -08:00
Grant Sanderson
a4eee6f44c Merge pull request #1744 from TurkeyBilly/patch-3
Add text_config for DecimalNumber
2022-02-15 09:59:46 -08:00
YishiMichael
8cac16b452 Update display_during_execution 2022-02-15 21:59:09 +08:00
YishiMichael
719cd8cde3 Remove redundant brackets 2022-02-15 21:54:56 +08:00
Bill Xi
0bb9216c14 Update hash_obj method 2022-02-15 21:50:14 +08:00
YishiMichael
6f9df8db26 Improve hashing algorithm 2022-02-15 21:38:22 +08:00
YishiMichael
3756605a45 Update display_during_execution 2022-02-15 20:55:44 +08:00
TonyCrane
0e4d4155a3 workflow: only build wheels for python 3.7+ 2022-02-15 20:23:59 +08:00
YishiMichael
0cab23b2ba Reorganize inheriting order of SVGMobject 2022-02-15 20:16:15 +08:00
TonyCrane
854f7cd2bf fix: remove type alias import in indication.py 2022-02-15 18:47:17 +08:00
TonyCrane
41c4023986 chore: add type hints to manimlib.animation 2022-02-15 18:39:45 +08:00
TonyCrane
d19e0cb9ab fix: remove import before future 2022-02-15 14:56:00 +08:00
TonyCrane
f085e6c2dd chore: add type hints to manimlib.window 2022-02-15 14:55:35 +08:00
TonyCrane
91ffdeb2d4 chore: add type hints to manimlib.shader_wrapper 2022-02-15 14:49:02 +08:00
TonyCrane
db71ed1ae9 fix: fix type hint of remove_empty_value 2022-02-15 14:38:55 +08:00
TonyCrane
4c16bfc2c0 chore: add type hints to manimlib.mobject 2022-02-15 14:37:15 +08:00
Bill Xi
aef02bfcf9 changed hashing 2022-02-15 11:45:17 +08:00
TonyCrane
3744844efa fix: fix type hint of set_array_by_interpolation 2022-02-15 11:35:22 +08:00
Bill Xi
9d04e287d7 Removed init_colors 2022-02-15 10:20:06 +08:00
Bill Xi
97c0f4857b Update numbers.py
Added config passing for text
2022-02-15 09:35:10 +08:00
Grant Sanderson
7f9b0a7eac Merge pull request #1742 from 3b1b/video-work
Presenter mode bug fix
2022-02-14 07:58:55 -08:00
Grant Sanderson
133724d29a Allow for using right arrow in presenter mode 2022-02-14 07:56:26 -08:00
Grant Sanderson
559b96e7ce Small bug fix for presenter mode 2022-02-14 07:52:06 -08:00
TonyCrane
773e013af9 chore: add type hints to manimlib.mobject.svg 2022-02-14 22:55:41 +08:00
TonyCrane
61c70b426c remove unnecessary import 2022-02-14 21:43:22 +08:00
TonyCrane
9bdcc8b635 style: remove quotes of annotations according to PEP 563 2022-02-14 21:41:45 +08:00
TonyCrane
66caf0c1ad chore: only import some classes when type checking 2022-02-14 21:34:56 +08:00
TonyCrane
62cab9feaf chore: re-add type hint for EventListener 2022-02-14 21:25:46 +08:00
TonyCrane
be5de32d70 chore: add type hints to manimlib.scene 2022-02-14 21:22:18 +08:00
鹤翔万里
09ce4717aa Merge branch '3b1b:master' into master 2022-02-14 20:02:50 +08:00
TonyCrane
7fb6f352c4 fix: fix some bugs caused by type hints and imports 2022-02-14 20:02:24 +08:00
TonyCrane
f29ef87bba style/docs: fix argument help style and update docs for it 2022-02-14 19:50:30 +08:00
TonyCrane
e39f81ccff Merge branch '3b1b-master' 2022-02-14 14:12:21 +08:00
TonyCrane
a0ed9edb42 resolve conflict 2022-02-14 14:12:06 +08:00
TonyCrane
fc1e916f42 docs: update changelog for #1725 #1727 #1728 #1731 #1739 #1740 2022-02-14 14:03:51 +08:00
Grant Sanderson
b3b7d214ad Fix Write bug (#1740)
* Avoid division by zero error for calling Write on null objects
2022-02-13 20:04:05 -08:00
Grant Sanderson
602809758e Video work (#1739)
* Enable setting points to a null list, and adding one point at a time.

* Add refresh_locked_data

* Add presenter mode to scenes with -p option

* Allow for an embed by hitting e during interaction

* Add set_min_height, etc.

* Make sure null parametric curve has at least one point

* Account for edge case where \{ is used in Tex

* Allow for logging notes in wait calls, useful for presenter mode

* Simplify choose, and add gen_choose for fractional amounts

* Default to no top on axes

* Allow match_x, match_y, etc. to take in a point

* Allow wait calls to ignore presenter mode

* Just use math.combo, no caching with choose(n, r)

* Use generator instead of list in bezier

* Bubble init_colors should override

* Account for "px" values read in from an svg

* Stop displaying when writing is happening

* Update the way Bubble override SVG colors
2022-02-13 15:16:16 -08:00
TonyCrane
960463d143 docs: remove support for python 3.6 2022-02-13 20:47:04 +08:00
TonyCrane
9a8aee481d chore: add type hints to manimlib.event_handler 2022-02-13 20:03:05 +08:00
TonyCrane
1064e2bb30 chore: add type hints to manimlib.camera 2022-02-13 19:32:53 +08:00
TonyCrane
992e61ddf2 style: rename Color type to ManimColor 2022-02-13 19:02:28 +08:00
TonyCrane
19187ead06 chore: add type hints to manimlib.mobject.types 2022-02-13 18:56:50 +08:00
TonyCrane
7f8216bb09 chore: replace some iterable with npt.ArrayLike 2022-02-13 15:18:04 +08:00
TonyCrane
e78113373a chore: add type hints to manimlib.mobject.mobject 2022-02-13 15:11:35 +08:00
TonyCrane
35025631eb chore: fix type hint of bezier 2022-02-13 12:56:03 +08:00
Elisha Hollander
f9351536e4 minor fixes (#1737) 2022-02-13 11:12:41 +08:00
TonyCrane
6e292daf58 chore: add type hints to manimlib.utils 2022-02-12 23:47:23 +08:00
YishiMichael
67f5b10626 Attempt to refactor SVGMobject with svgelements (#1731)
* Some small refactors

* Refactor MTex

* Implement TransformMatchingMTex

* Some refactors

* Some refactors

* Some small refactors

* Strip strings before matching

* Implement get_submob_tex

* Use RGB color mode

* Some small refactors

* Try refactoring SVGMobject with svglib

* Refactor SVGMobject using svgelements

* Refactor SVGMobject using svgelements

* Use functions instead of func names as dict values

* style: modify import order to conform to PEP8

* Set default values to None

* modify import order

* Remove unused import

Co-authored-by: TonyCrane <tonycrane@foxmail.com>
2022-02-11 07:53:21 -08:00
YishiMichael
baba6929df Implement ImplicitFunction (#1727) 2022-02-07 08:24:40 -08:00
YishiMichael
d6b20a7306 Refactor MTex and implement TransformMatchingMTex (#1725)
* Some small refactors

* Refactor MTex

* Implement TransformMatchingMTex

* Some refactors

* Some refactors

* Some small refactors

* Strip strings before matching

* Implement get_submob_tex

* Use RGB color mode

* Some small refactors
2022-02-07 08:21:53 -08:00
鹤翔万里
4c3ba7f674 Clean dependencies (#1728)
* clean dependencies

* add classifiers to metadata
2022-02-05 22:13:34 +08:00
TonyCrane
3883f57bf8 release: ready to release v1.4.1 2022-02-04 11:03:37 +08:00
TonyCrane
d2e0811285 import Iterable from collections.abc instead of collections 2022-02-04 10:55:59 +08:00
Grant Sanderson
1e2a6ffb8a Merge pull request #1724 from TurkeyBilly/patch-2
Temporarily fix boolean operation bug
2022-01-31 08:06:27 -08:00
Bill Xi
56e5696163 Update boolean_ops.py 2022-01-31 23:29:36 +08:00
TonyCrane
1ec00629a5 release: ready to release v1.4.0 2022-01-30 13:06:22 +08:00
TonyCrane
aa6335cd90 docs: update changelog for #1719 #1720 #1721 and #1723 2022-01-30 13:00:57 +08:00
YishiMichael
7093f7d02d Some small refactors to MTex (#1723) 2022-01-30 12:42:35 +08:00
Grant Sanderson
fad9ed2df7 Merge pull request #1720 from YishiMichael/master
Handle explicit color-related commands
2022-01-29 08:01:48 -08:00
YishiMichael
725155409b Some small refactors 2022-01-29 21:06:54 +08:00
YishiMichael
a6675eb043 Some small refactors 2022-01-29 14:35:27 +08:00
YishiMichael
5d2dcec307 Fix color-related bugs 2022-01-29 14:05:52 +08:00
Grant Sanderson
f60dc7cd07 Merge pull request #1719 from 3b1b/parse-style
Parse style from <style> tag and Add support to <line> tag
2022-01-27 13:33:14 -08:00
YishiMichael
6c39cac62b Remove redundant attribute 2022-01-28 01:19:02 +08:00
鹤翔万里
2bd25a55fa add back override parameter to init_colors 2022-01-28 00:20:13 +08:00
鹤翔万里
0e4edfdd79 improve config helper (#1721) 2022-01-28 00:16:19 +08:00
YishiMichael
277256a407 Merge branch '3b1b:master' into master 2022-01-27 23:11:19 +08:00
YishiMichael
831b7d455c Handle explicit color-related commands 2022-01-27 23:09:05 +08:00
TonyCrane
1d14a23af9 docs: update changelog for #1712 #1717 and #1716 2022-01-27 22:21:40 +08:00
TonyCrane
dffa70ea15 docs: update changelog for #1704 and #1709 2022-01-27 22:09:57 +08:00
TonyCrane
31976063df add dependency cssselect2 2022-01-27 17:31:14 +08:00
TonyCrane
aa135280ac support <line> tag in SVG 2022-01-27 17:23:58 +08:00
TonyCrane
f0160822ba fix bug of ref map 2022-01-27 17:17:19 +08:00
TonyCrane
48e07d1817 parse style attribute using tinycss 2022-01-27 17:16:52 +08:00
TonyCrane
3ef5899a24 some cleanups 2022-01-27 16:43:45 +08:00
TonyCrane
f895455264 add parser for <style> tag of SVG 2022-01-27 16:37:51 +08:00
Grant Sanderson
3baa14103e Merge pull request #1716 from YishiMichael/master
Refactor MTex and some clean-ups
2022-01-26 08:56:44 -08:00
Grant Sanderson
c315300ff1 Merge branch 'master' into master 2022-01-26 08:54:18 -08:00
Grant Sanderson
3b17d6d0eb Merge pull request #1718 from 3b1b/text-fix
Text fix
2022-01-26 08:21:36 -08:00
Grant Sanderson
8a29de5ef0 Override style for Text 2022-01-26 08:21:00 -08:00
Grant Sanderson
ecb729850a Small style fixes 2022-01-26 08:20:45 -08:00
Grant Sanderson
a770291053 Include style in MTex.get_mobjects_from 2022-01-26 08:20:38 -08:00
Grant Sanderson
27c666fab5 Merge pull request #1717 from 3b1b/svg-style
Parse and generate style for SVG
2022-01-26 07:56:03 -08:00
YishiMichael
942a7e71b8 Update MTex 2022-01-26 23:46:13 +08:00
TonyCrane
ebb75d1235 cached SVGMobject in SingleStringTex with default color 2022-01-26 20:37:44 +08:00
TonyCrane
9af23415a2 synchronize SingleStringTex's color to SVGMobject 2022-01-26 20:20:48 +08:00
TonyCrane
19778e405a some cleanups 2022-01-26 19:55:47 +08:00
TonyCrane
833e40c2d4 fix default style 2022-01-26 19:50:27 +08:00
TonyCrane
9df53b8a18 fix the bug of M command with more than 2 args 2022-01-26 14:05:01 +08:00
TonyCrane
ff86b0e378 fix the bug of outdated relative_point after command Z 2022-01-26 13:56:42 +08:00
TonyCrane
92adcd75d4 add style support to svg 2022-01-26 13:53:53 +08:00
YishiMichael
240f5020b4 Add back default_config.yml 2022-01-26 13:21:27 +08:00
YishiMichael
e8205a5049 Some refactors for MTex 2022-01-26 13:03:14 +08:00
TonyCrane
6c8dd14adc some clean 2022-01-26 11:00:57 +08:00
Grant Sanderson
07f84e2676 Merge pull request #1712 from 3b1b/fix-svg
Improve handling of SVG transform and Some refactors
2022-01-25 13:26:40 -08:00
TonyCrane
8db1164ece some refactors 2022-01-25 21:48:04 +08:00
TonyCrane
790bf0a104 fix typo 2022-01-25 20:25:30 +08:00
TonyCrane
8205edcc4c fix a small bug 2022-01-25 20:13:20 +08:00
TonyCrane
05b3c9852e fix add_smooth_cubic_curve_to when have only one point 2022-01-25 20:06:00 +08:00
TonyCrane
925f2e123f add comments 2022-01-25 19:54:19 +08:00
TonyCrane
565763a2ff reconstruct path parser 2022-01-25 19:44:42 +08:00
TonyCrane
6a74c241b8 fix bug of node which is not an element 2022-01-25 16:28:23 +08:00
TonyCrane
416cc8e6d5 add warning for unsupported element type 2022-01-25 14:41:11 +08:00
TonyCrane
d694aed452 add support for skewX and skewY transform 2022-01-25 14:40:02 +08:00
TonyCrane
11379283aa add support for rotate transform 2022-01-25 14:29:47 +08:00
TonyCrane
dd13559b11 replace warnings.warn with log.warning 2022-01-25 14:09:05 +08:00
TonyCrane
1658438fef allow Mobject.scale receive iterable scale_factor 2022-01-25 14:05:32 +08:00
TonyCrane
f4eb2724c5 refactor SVGMobject.handle_transforms 2022-01-25 14:04:35 +08:00
TonyCrane
33f720c73a fix typo 2022-01-25 13:15:53 +08:00
TonyCrane
bbb4fa155c fix the depth of svg tag 2022-01-25 13:14:19 +08:00
Grant Sanderson
2318c9e716 Merge pull request #1709 from TurkeyBilly/patch-4
Fix "Code is unreachable Pylance" warning for NumberPlane
2022-01-17 08:56:08 -08:00
Bill Xi
e80dd243f1 Added abstract method decorator and override 2022-01-17 20:27:34 +08:00
Grant Sanderson
3ffe300f96 Merge pull request #1704 from TurkeyBilly/patch-2
Adding "label_buff" config parameter for Brace
2022-01-03 08:53:34 -08:00
Bill Xi
24e3caa072 fix no "import copy" bug
added import copy
2022-01-03 16:49:00 +08:00
Bill Xi
9efd02c500 Remove spelling mistake
I misspelled "label"
2022-01-03 16:37:26 +08:00
Bill Xi
0a318486c5 Adding "lable_buff" config parameter for Brace 2022-01-03 14:57:16 +08:00
鹤翔万里
919133c6bf Merge pull request #1702 from Suji04/patch-2
removed extra 'all' from comments
2021-12-31 18:18:50 +08:00
Sujan Dutta
066a2ed5dc removed extra 'all' from comments 2021-12-31 00:10:57 -05:00
TonyCrane
09ced7ce9a docs: update changelog for #1694 and #1697 2021-12-23 10:34:15 +08:00
Grant Sanderson
505b229117 Merge pull request #1697 from 3b1b/video-work
Video work
2021-12-21 10:59:50 -08:00
Grant Sanderson
5aa8d15d85 Use FFMPEG_BIN instead of "ffmpeg" for sound incorporation 2021-12-21 10:58:58 -08:00
Grant Sanderson
7aa05572ab Remove unnecessary import 2021-12-21 10:58:41 -08:00
Grant Sanderson
f1996f8479 Small hack for the lightbulb, needs to be fixed properly later 2021-12-21 10:58:33 -08:00
Grant Sanderson
37b63ca956 Merge pull request #1694 from DangGiaChi/BarChart_modified
Add option to add ticks on x-axis in BarChart()
2021-12-17 09:30:53 -08:00
DangGiaChi
84fd657d9b Change variables names: x_tick, x_ticks, y_tick, y_ticks 2021-12-17 15:02:10 +07:00
DangGiaChi
b489490f41 Fixed things as suggestions 2021-12-17 07:14:37 +07:00
DangGiaChi
bbf45f95c6 Add option to add ticks on x-axis in BarChart() 2021-12-16 22:03:29 +07:00
TonyCrane
b61f1473a5 release: ready to release v1.3.0 2021-12-14 13:41:44 +08:00
TonyCrane
e3d5b49a55 docs: remove deprecated config usage example 2021-12-14 13:35:50 +08:00
TonyCrane
4d6a0db1e1 docs: update changelog for #1691 and #1678 2021-12-14 13:31:44 +08:00
TonyCrane
0af46e149d add metavar LINENO for --embed option 2021-12-14 12:14:04 +08:00
TonyCrane
896b011d76 docs: update changelog for #1688 2021-12-14 12:11:25 +08:00
Grant Sanderson
3adaf8e325 Merge pull request #1678 from YishiMichael/master
Construct `MTex`
2021-12-13 16:09:55 -08:00
Grant Sanderson
8762177df5 Merge pull request #1691 from 3b1b/video-work
Video work
2021-12-13 16:07:42 -08:00
Grant Sanderson
a1d51474ea Add GlowDot 2021-12-13 16:03:57 -08:00
Grant Sanderson
83841ae415 Add Dodecahedron 2021-12-13 16:03:46 -08:00
Grant Sanderson
b81f244c3c Inserted "self.embed" line should match passed in line number 2021-12-13 16:03:36 -08:00
Grant Sanderson
7023548ec6 Fix TransformMatchingParts bug 2021-12-13 16:03:12 -08:00
Grant Sanderson
758f329a06 Use array copy when checking need for refreshing triangulation 2021-12-13 16:02:47 -08:00
Grant Sanderson
8f1dfabff0 VectorizedPoint should call __init__ for both super classes 2021-12-13 16:02:10 -08:00
Grant Sanderson
7fa01d5de8 Small formatting change 2021-12-13 16:01:54 -08:00
Michael W
0de303d5e0 Some refactors
- Split out `_TexParser` class
- Replace `math_mode` parameter with `tex_environment`
- Fix the bug that braces following even number of backslashes aren't matched
2021-12-13 21:01:27 +08:00
Michael W
155839bde9 Add unbreakable_commands parameter 2021-12-13 12:46:29 +08:00
Grant Sanderson
3a1e5e1bcf Remove old implementation for SurfaceMesh 2021-12-07 10:07:49 -08:00
Grant Sanderson
264f7b1172 Add Circle.get_radius 2021-12-07 10:07:25 -08:00
Grant Sanderson
85e90a1488 Don't print info for pre-run scene 2021-12-07 10:07:15 -08:00
Grant Sanderson
f8e6e7df3c Update progress display for full scene render 2021-12-07 10:06:48 -08:00
Grant Sanderson
5dd7cce67f Have Scene.wait only go through full progression during skipping when there are time-based updaters 2021-12-07 10:05:33 -08:00
Grant Sanderson
f21a4a4696 Only stop skipping if the scene wasn't originally meant to be 2021-12-07 10:04:28 -08:00
Grant Sanderson
98b0d266d2 Make sure skip_animations and start_at_animation_number play well together 2021-12-07 10:03:10 -08:00
Michael W
6821a7c20e Handle empty strings 2021-12-07 14:12:08 +08:00
Michael W
00f72da493 Some small refactor 2021-12-07 13:17:48 +08:00
Michael W
744916507c Add a debugging method 2021-12-07 12:55:52 +08:00
Michael W
88d863c1d7 Support get_tex() for submobjects of MTex 2021-12-07 00:34:07 +08:00
Michael W
d7dcc9d76f Recover file 2021-12-07 00:32:12 +08:00
Michael W
4631508b7d Add get_tex() method 2021-12-06 13:48:17 +08:00
Michael W
8803088121 Fix bugs concerned with child environments 2021-12-06 09:44:59 +08:00
Michael W
1d466cb299 Add Exception for indices_of_part() 2021-12-05 22:17:09 +08:00
Michael W
5a1f00b1cb Add TransformMatchingMTex 2021-12-05 11:46:15 +08:00
Michael W
17d31045b2 Add TransformMatchingMTex 2021-12-05 11:45:42 +08:00
Michael W
950466c1da Some refactors 2021-12-05 10:21:55 +08:00
Michael W
62151e52f1 Merge branch '3b1b:master' into master 2021-12-01 08:42:17 +08:00
Grant Sanderson
b4ce0b910c Merge pull request #1688 from 3b1b/video-work
Video work
2021-11-30 11:45:57 -08:00
Grant Sanderson
9dd1f47dab Create single progress display for full scene render
When a scene is written to file, it will now do a preliminary run of a copy of the scene with skip_animations turned on to count the total frames, which has the added benefit of catching runtime errors early, and allowing an quicker preview of the last frame to be sure everything will render as expected.

The Progress display bars for individual animations are replaced with a more global progress display bar showing the full render time for the scene.

This has the downside that all the non-rendering computations in a scene are run twice, so any scene with slow computations unrelated to rendering will take longer. But those are rarer, so the benefits seem worth it.
2021-11-30 11:41:33 -08:00
Grant Sanderson
49743daf32 Add Mobject.insert_submobject method 2021-11-30 11:30:50 -08:00
Grant Sanderson
ba23fbe71e Make sure Mobject.is_fixed_in_frame stays updated with uniforms 2021-11-30 11:30:34 -08:00
Grant Sanderson
ee1594a3cb Match fix_in_frame status for FlashAround mobject 2021-11-30 11:29:12 -08:00
Grant Sanderson
e9afb0ee33 Fix tiny PEP errors 2021-11-30 11:28:26 -08:00
Michael W
8b1715379d Some small refactors 2021-11-29 09:48:00 +08:00
Michael W
2501fac32f Some small refactors 2021-11-29 09:38:48 +08:00
Michael W
1aec0462ec Some small refactors 2021-11-29 01:43:48 +08:00
Michael W
83c70a59d8 Sort superscripts and subscripts in submobjects 2021-11-29 01:15:38 +08:00
Michael W
9b8a6e7ff8 Merge branch '3b1b:master' into master 2021-11-28 23:38:23 +08:00
Michael W
758f2ec236 Some small refactor 2021-11-28 23:38:12 +08:00
TonyCrane
d9cac38618 update changelog 2021-11-28 18:50:57 +08:00
Michael W
e8ebfa312b Prevent infinite loops from unexpected inputs 2021-11-28 13:26:54 +08:00
Michael W
dae24891fa Add get_all_isolated_substrings method 2021-11-28 13:03:33 +08:00
Michael W
a4f9de1ca1 Fix bugs concerned with coloring 2021-11-28 12:14:29 +08:00
Michael W
697028cd4c Add slicing and indexing methods 2021-11-27 23:07:46 +08:00
Michael W
c84acc0023 Remove disabled methods 2021-11-27 19:53:52 +08:00
Michael W
b1d869cd11 Update __init__.py to include mtex_mobject 2021-11-27 16:21:06 +08:00
Michael W
13a5f6d6ff Add MTex 2021-11-27 16:19:01 +08:00
Michael W
e3f87d835b Recover files 2021-11-27 16:17:22 +08:00
Michael W
7ffab788b7 Recover numbers.py 2021-11-27 16:16:18 +08:00
Grant Sanderson
bcd09906be Fix bug in ShowSubmobjectsOneByOne 2021-11-22 08:05:59 -08:00
Grant Sanderson
407c53f97c Have rotation_between_vectors handle identical/similar vectors 2021-11-18 17:52:48 -08:00
Grant Sanderson
eea3c6b294 Better align SurfaceMesh to the corresponding surface polygons 2021-11-18 17:52:17 -08:00
Grant Sanderson
d2182b9112 Make sure set_length returns self 2021-11-18 17:51:56 -08:00
Grant Sanderson
fbc329d7ce Small bug fix for angle_between_vectors 2021-11-17 12:49:53 -08:00
Grant Sanderson
25045143a1 Have mobject uniforms supercede camera uniforms 2021-11-17 12:49:08 -08:00
Grant Sanderson
e899604a2d Add getter methods for specific euler angles 2021-11-17 12:48:17 -08:00
Grant Sanderson
0b898a5594 Add always_sort_to_camera for surfaces 2021-11-16 17:38:43 -08:00
Grant Sanderson
ee2f68cd49 Exchange gloss for reflectiveness 2021-11-16 17:38:30 -08:00
Grant Sanderson
2cce4ccdd7 Exchange gloss for reflectiveness 2021-11-16 17:38:08 -08:00
Grant Sanderson
f3ecebee43 Remove unnecessary import 2021-11-16 17:37:45 -08:00
Grant Sanderson
e764da3c3a use quick_point_from_proportion for graph points 2021-11-16 17:37:27 -08:00
Grant Sanderson
fbbea47d11 Change temp embed file name 2021-11-16 17:37:01 -08:00
Grant Sanderson
781a9934fd Add shortcut for setting black background stroke 2021-11-16 17:29:24 -08:00
Grant Sanderson
a7173142bf Fix VMobject.fade 2021-11-16 17:29:10 -08:00
Grant Sanderson
0e78027186 Improve point_from_proportion to account for arc length 2021-11-16 17:28:48 -08:00
Grant Sanderson
82bd02d21f Fix angle_between_vectors, add rotation_between_vectors 2021-11-16 17:08:35 -08:00
Grant Sanderson
d065e1973d Add option to insert embed line from the command line (mildly hacky) 2021-11-14 12:31:56 -08:00
Grant Sanderson
7070777408 Tiny formatting change 2021-11-12 15:47:23 -08:00
TonyCrane
5c2a9f2129 style: change CRLF to LF
Change the line ending characters from CRLF to LF
2021-11-12 21:49:56 +08:00
Michael W
1b695e1c19 Refactor Tex 2021-11-12 21:22:42 +08:00
Michael W
da1cc44d90 Remove SingleStringTex 2021-11-12 21:21:44 +08:00
Grant Sanderson
3bbb759112 Merge branch 'master' of github.com:3b1b/manim into video-work 2021-11-09 09:18:56 -08:00
Grant Sanderson
41c6cbcb59 Merge pull request #1675 from YishiMichael/master
Add boolean operations for mobjects
2021-11-09 09:18:38 -08:00
Grant Sanderson
5930e6a176 Refresh unit normal when reversing points 2021-11-09 09:15:15 -08:00
Grant Sanderson
8f3ff91165 Add reflectiveness to style and default to fill for VMobject.get_color 2021-11-09 09:15:00 -08:00
Michael W
b12677bc1a Add files via upload 2021-11-10 00:35:09 +08:00
Michael W
cdec64e3f1 Add boolean operations for mobjects 2021-11-10 00:23:40 +08:00
Michael W
2dc8bc9b9c Add boolean operations for mobjects 2021-11-10 00:23:04 +08:00
Michael W
94f0bf557a Add skia-pathops package 2021-11-10 00:21:04 +08:00
Grant Sanderson
e20690b7c1 Don't necessarily remove anti_alias on ThreeDScene 2021-11-08 21:48:42 -08:00
Grant Sanderson
2c7689ed9e Enable glow_factor on dots 2021-11-08 21:47:48 -08:00
Grant Sanderson
c73d507c76 Fix SurfaceMesh to be evenly spaced 2021-11-08 21:47:26 -08:00
Grant Sanderson
317a5d6226 Make it possible to set full screen preview as a default 2021-11-08 21:47:02 -08:00
Grant Sanderson
4339f97c56 Small refactor and added functionality 2021-11-08 21:46:35 -08:00
Grant Sanderson
81c3ae3037 Have separate notions of gloss and reflectiveness 2021-11-08 21:46:09 -08:00
Grant Sanderson
61b04079f5 Merge branch 'master' of github.com:3b1b/manim into video-work 2021-11-01 13:18:09 -07:00
Grant Sanderson
5a0e5a16ea Merge pull request #1667 from TurkeyBilly/master
Overridden add operations for mobjects
2021-11-01 13:17:16 -07:00
Grant Sanderson
f0b5181694 Update manimlib/mobject/mobject.py
Small bug fix to Mobject.__add__
2021-11-01 13:16:50 -07:00
Grant Sanderson
185782a2e7 Remove stray brace 2021-11-01 13:05:13 -07:00
Grant Sanderson
8ab95ebe9d Change where unit_normal data gets updated 2021-11-01 13:04:53 -07:00
Bill Xi
77159eea2e Update mobject.py 2021-11-01 10:19:06 +08:00
Bill Xi
6766e459f2 Update vectorized_mobject.py 2021-10-31 20:03:04 +08:00
Bill Xi
01f4ef3e5d Create mobject.py 2021-10-31 20:02:30 +08:00
Bill Xi
b531c82bc4 Update mobject.py 2021-10-31 20:01:16 +08:00
Bill Xi
5d942d5ac0 Update vectorized_mobject.py 2021-10-31 18:42:14 +08:00
Bill Xi
b285ca7c22 Update vectorized_mobject.py 2021-10-31 18:38:23 +08:00
Bill Xi
82540edae9 Update mobject.py 2021-10-31 18:37:12 +08:00
Bill Xi
f9a6fa7036 Update mobject.py 2021-10-31 18:35:28 +08:00
Bill Xi
4eabaecfc8 Update mobject.py 2021-10-31 18:34:23 +08:00
Grant Sanderson
b881e55fca Merge branch 'master' of github.com:3b1b/manim into video-work 2021-10-24 09:48:56 -07:00
Grant Sanderson
f1c50640a3 Merge pull request #1662 from YishiMichael/master
Refactor command handling in `svg_mobject.py`
2021-10-24 09:47:54 -07:00
Grant Sanderson
deb1311e48 Fix VideoIcon 2021-10-24 09:28:52 -07:00
Grant Sanderson
82fa6ab125 Temporary hack to fix a bug I don't understand 2021-10-24 09:28:39 -07:00
Michael W
4d91ff3f2f Update balance_braces method 2021-10-24 23:21:49 +08:00
Michael W
b6f9da87d0 Refactor command handling in svg_mobject.py 2021-10-24 22:30:18 +08:00
BillyLikesHacking
c60e97ebf9 Update vectorized_mobject.py 2021-10-22 20:58:19 +08:00
BillyLikesHacking
b1ed16e81a Update mobject.py 2021-10-22 20:46:47 +08:00
BillyLikesHacking
c94ebaa260 Update vectorized_mobject.py 2021-10-22 20:03:58 +08:00
BillyLikesHacking
030fb52018 Update vectorized_mobject.py 2021-10-22 20:03:05 +08:00
BillyLikesHacking
487f582302 Update mobject.py 2021-10-22 20:02:05 +08:00
BillyLikesHacking
6d0c55d2ba Update mobject.py 2021-10-22 20:00:27 +08:00
鹤翔万里
c82f60e29e Merge pull request #1658 from 050644zf/master
Update the link of the Chinese Ver. Docs
2021-10-20 17:25:28 +08:00
Nightsky
c03279d626 Update the link of the Chinese Ver. Docs 2021-10-20 17:20:52 +08:00
Grant Sanderson
7b72fa8ca1 Merge branch 'master' of github.com:3b1b/manim into video-work 2021-10-18 07:12:10 -07:00
Grant Sanderson
8b454fbe93 Slight tweaks to how saturation_factor works on newton-fractal 2021-10-18 07:12:05 -07:00
Grant Sanderson
f77e25ff86 Merge pull request #1655 from widcardw/master
Fix the bug of rotating camera
2021-10-18 07:01:58 -07:00
widcardw
872ef67cf7 Fix bug of rotating camera 2021-10-18 21:00:25 +08:00
widcardw
305ca72ebe Fix the bug of rotating camera 2021-10-18 19:05:05 +08:00
TonyCrane
4d81d3678b update changelog 2021-10-16 21:07:53 +08:00
鹤翔万里
55e968e174 Merge pull request #1653 from YishiMichael/master
Fix parameter typo
2021-10-16 21:06:32 +08:00
TonyCrane
97d1609849 update changelog 2021-10-16 21:03:36 +08:00
TonyCrane
e10f850d0d add cli flag to specify log level 2021-10-16 21:01:39 +08:00
Michael W
b8584fe5ab Fix parameter typo 2021-10-16 20:59:31 +08:00
TonyCrane
b6c23a09e9 update version to v1.2.0 2021-10-16 13:07:26 +08:00
Michael W
0e574882b3 Refactor #1637 (#1650)
* Refactor #1637

* Refactor #1637

* Refactor #1637

* Refactor #1637

* Refactor #1637

* Refactor #1637

* Update config.py

Co-authored-by: 鹤翔万里 <tonycrane@foxmail.com>
2021-10-16 13:04:52 +08:00
TonyCrane
bee3470856 update changelog 2021-10-16 11:12:13 +08:00
Grant Sanderson
ed3d44120c Merge pull request #1637 from 3b1b/add_warnings
Add warnings and use rich to display log
2021-10-15 12:13:02 -07:00
Grant Sanderson
4466cfe727 Merge branch 'master' into add_warnings 2021-10-15 12:12:36 -07:00
Grant Sanderson
e9aba0b92c Merge pull request #1649 from 3b1b/quintic
Small tweaks
2021-10-15 12:10:18 -07:00
Grant Sanderson
6cdbe0d67a Have image mobject remember the filepath to the Image 2021-10-15 12:08:30 -07:00
Grant Sanderson
7732d2f0ee Fix ComplexPlane -i display bug 2021-10-15 12:07:47 -07:00
Grant Sanderson
f77482c864 Merge pull request #1648 from 3b1b/quintic
Newton fractals and Mandelbrot Fractals
2021-10-15 12:07:05 -07:00
Grant Sanderson
23ebbb2af1 Merge branch 'master' of github.com:3b1b/manim into quintic 2021-10-15 12:05:09 -07:00
Grant Sanderson
14fbed76da Consolidate and rename newton_fractal shader 2021-10-15 12:00:29 -07:00
Grant Sanderson
e10a752c00 Allow releasing of Textures 2021-10-15 08:52:37 -07:00
鹤翔万里
fde82e09c0 Merge pull request #1643 from BillyLikesHacking/patch-1
Fixed Simple typo
2021-10-12 12:21:06 +08:00
BillyLikesHacking
cfd362aa56 Update matrix.py 2021-10-12 09:04:30 +08:00
Grant Sanderson
329d2c6eae Make sure stroke width is always a float 2021-10-11 06:23:03 -07:00
Grant Sanderson
f22a341e84 Save state before each embed 2021-10-11 06:22:41 -07:00
Grant Sanderson
2d115a2c90 Small cleanup 2021-10-11 06:22:26 -07:00
Grant Sanderson
c726eb7a18 buf fix with get_lines_parallel_to_axis 2021-10-11 06:22:05 -07:00
Grant Sanderson
33fa76dfac Add more fractals and decompose slightly 2021-10-11 06:21:47 -07:00
TonyCrane
0021880fba update changelog 2021-10-07 23:37:33 +08:00
TonyCrane
ed99427a3b print version when start 2021-10-07 17:42:23 +08:00
TonyCrane
7425057d9f use rich to log 2021-10-07 17:37:10 +08:00
TonyCrane
ef5253f1bc add cli flag -v to show version info 2021-10-06 17:54:28 +08:00
TonyCrane
fbccb1ebf3 add tips for embed mode 2021-10-06 17:34:46 +08:00
TonyCrane
f626a1a1e2 add tips for interactive mode 2021-10-06 17:28:18 +08:00
TonyCrane
c1242d2dd5 add warning for empty 2021-10-06 17:21:56 +08:00
Grant Sanderson
719c81d72b Fix negative path_arc case 2021-10-05 14:17:41 -07:00
Grant Sanderson
ed1fc4d5f9 Add bounding box as exceptional key to point_cloud mobject 2021-10-05 14:17:24 -07:00
Grant Sanderson
3822b00bec Change how Julia set highlight works 2021-10-05 14:16:50 -07:00
Grant Sanderson
2753beb7bb Merge branch 'master' of github.com:3b1b/manim into quintic 2021-10-03 10:28:14 -07:00
Grant Sanderson
a4afbfd739 Small fixes to PMobject 2021-10-03 10:27:34 -07:00
Grant Sanderson
5f878a2c1a Fix match_style 2021-10-03 10:27:06 -07:00
Grant Sanderson
9483f26a3b Copy uniform arrays in Mobject.copy 2021-10-03 10:26:47 -07:00
Grant Sanderson
b4132e3d5e Bug fix for 0 arrow length case 2021-10-03 10:26:27 -07:00
Grant Sanderson
e9b404406d Updates to poly_fractal shaders 2021-10-01 12:34:06 -07:00
Grant Sanderson
b543cc0e32 Temporary fix for PMobject array resizing 2021-10-01 12:33:52 -07:00
Grant Sanderson
d45ea28dc1 Fix DotCloud.set_radii 2021-10-01 12:33:20 -07:00
Grant Sanderson
788775e419 Larger spacing between Text lines 2021-10-01 12:32:38 -07:00
Grant Sanderson
1bca0e63e9 Remove unnecessary import 2021-10-01 12:32:20 -07:00
Grant Sanderson
54ad3550ef Fix bug with SVG rectangles 2021-10-01 12:32:04 -07:00
Grant Sanderson
d19b386415 Fix dots 2021-10-01 12:31:16 -07:00
Grant Sanderson
e359f520bc Merge pull request #1625 from YishiMichael/master
Add Code mobject with syntax highlighting
2021-09-15 09:31:34 -07:00
TonyCrane
696fc85ff7 change CRLF to LF 2021-09-15 20:29:56 +08:00
TonyCrane
add1daf500 change CRLF to LF 2021-09-15 20:02:57 +08:00
Michael W
242e4a3471 Add pygments to support Code 2021-09-15 16:04:27 +08:00
Michael W
9e563ae3b4 Add Code mobject and rewrite Text.text2settings() 2021-09-15 15:55:19 +08:00
鹤翔万里
da909c0df8 Merge pull request #1624 from BillyLikesHacking/patch-1
Update comments in example.py
2021-09-11 23:17:41 -05:00
BillyLikesHacking
0239e12d8a Update comments in example.py
updated the cmd command line to "manimgl example_scenes.py OpeningManimExample" instead of "python -m manim", which the latter one was used for cairo-backend manim version instead of the current manimgl
2021-09-12 11:06:09 +08:00
鹤翔万里
0fd8fdc3ca Merge pull request #1620 from meadlai/patch-1
Fix the import
2021-09-04 08:50:55 -05:00
meadlai
762f1abef7 Fix the import
Fix the import statement
2021-09-04 21:31:57 +08:00
Grant Sanderson
17c2772b84 Add Mobject.replicate 2021-08-28 06:21:51 -07:00
Grant Sanderson
0d2d1b5c03 Add MAX_DEGREE to poly_fractal 2021-08-28 06:21:32 -07:00
Grant Sanderson
4ce123be44 (Maybe temporary?) upates to Tracers 2021-08-26 11:44:45 -07:00
Grant Sanderson
d5a88d0fa4 Pass tuples and not arrays to uniforms 2021-08-26 11:44:24 -07:00
Grant Sanderson
3b146636b4 Use isclose in place of of == 0 2021-08-26 11:43:44 -07:00
Grant Sanderson
b24ba19dec Add kwargs to set_length 2021-08-26 11:43:19 -07:00
Grant Sanderson
0dc096bf57 Fix bug for single-valued ValueTracker 2021-08-26 11:42:58 -07:00
Grant Sanderson
e40a2935b1 Remove redundant relic 2021-08-26 11:42:32 -07:00
Grant Sanderson
f84b8a66fe poly_fractal shader 2021-08-26 11:40:55 -07:00
鹤翔万里
952a598e3b Merge pull request #1613 from k1499/fix-example-scenes-doc-typo
Typo fix in UpdatersExample
2021-08-24 23:27:08 -05:00
Grant Sanderson
c635f19f2a Push pixel_coords_to_space_coords to Window 2021-08-24 11:26:43 -07:00
Grant Sanderson
8645894255 Fix CoordinateSystem init bug 2021-08-24 11:26:22 -07:00
Kausik SS
e712951f2d Typo fix in UpdatersExample 2021-08-24 10:44:24 +05:30
TonyCrane
1b24074369 update packaging method 2021-08-24 09:00:42 +08:00
Grant Sanderson
acba13f499 Add Scene.point_to_mobject 2021-08-22 14:57:32 -07:00
Grant Sanderson
61aec6051a Use generator in place of list 2021-08-21 17:08:28 -07:00
Grant Sanderson
9a78d13212 get_smooth_quadratic_bezier_handle_points edge case for 2 points 2021-08-21 17:07:49 -07:00
Grant Sanderson
0787c4f362 Make sure framerate is 30 for previewed scenes 2021-08-21 17:07:20 -07:00
Grant Sanderson
0b7b3f4f31 Improve NumberLine.p2n speed 2021-08-21 17:07:05 -07:00
Grant Sanderson
7356a36fa7 Only call self.throw_error_if_no_points once for get_start_and_end 2021-08-21 17:06:37 -07:00
Grant Sanderson
f3e3a7c56f Improve TracingTaill 2021-08-21 17:05:40 -07:00
Grant Sanderson
a35dd5a3cb Add TracingTail 2021-08-21 10:36:59 -07:00
Grant Sanderson
7b4199c674 Call _handle_scale_side_effects after scaling takes place 2021-08-21 10:36:18 -07:00
Grant Sanderson
d8378d8157 Use approximately_smooth by default 2021-08-21 10:35:50 -07:00
Grant Sanderson
8647a6429d Reimplement arrow to be stroke, not fill (which will break some past scenes) 2021-08-21 10:35:29 -07:00
Grant Sanderson
3bb8f3f042 Add set_max_width, set_max_height, etc. 2021-08-19 14:47:30 -07:00
Grant Sanderson
56df15453f Fix bug with common range array used for all coordinate systems 2021-08-19 14:47:10 -07:00
Grant Sanderson
d50717a3fc Merge pull request #1607 from 3b1b/perf
Perf
2021-08-19 10:33:47 -07:00
Grant Sanderson
ca9b70e218 Make sure triangulation is remembered correctly 2021-08-19 09:19:02 -07:00
Grant Sanderson
25c5aa2c65 Small stylistic cleanup 2021-08-19 09:18:48 -07:00
Grant Sanderson
c08ea4e645 Add FlashyFadeIn 2021-08-19 09:00:30 -07:00
Grant Sanderson
573d630e5b Merge branch 'master' of github.com:3b1b/manim 2021-08-19 08:38:03 -07:00
Grant Sanderson
6d72893382 Let ValueTracker track vectors 2021-08-19 08:37:57 -07:00
Grant Sanderson
40290ada83 Remove unused parameter 2021-08-19 08:37:40 -07:00
Grant Sanderson
bd356daa99 Add VCube 2021-08-19 08:37:01 -07:00
Grant Sanderson
b667db2d31 Simplify Square 2021-08-19 08:34:53 -07:00
Grant Sanderson
f92211b352 Merge pull request #1598 from YishiMichael/master
Support the elliptical arc command for SVGMobject
2021-08-09 16:19:15 -07:00
Grant Sanderson
1c2b52a128 Merge branch 'master' of github.com:3b1b/manim 2021-08-09 16:09:01 -07:00
Grant Sanderson
eb315daeda Merge pull request #1601 from 3b1b/revert-scale-changes
Revert scale changes
2021-08-09 16:07:33 -07:00
Grant Sanderson
e151334675 Alternate fix to Decimal scaling issue 2021-08-09 16:06:19 -07:00
Grant Sanderson
bbeba108bc Merge branch 'master' of github.com:3b1b/manim into revert-scale-changes 2021-08-09 15:42:41 -07:00
Grant Sanderson
77ce17679c Change back to simpler Mobject.scale implementation 2021-08-09 15:42:32 -07:00
Grant Sanderson
7fa2654d8a Revert changes to Mobject.scale 2021-08-09 15:37:03 -07:00
Michael W
ec620fa849 Support the elliptical arc command for SVGMobject 2021-08-08 20:53:50 +08:00
鹤翔万里
da53a6f808 Merge pull request #1594 from slowy07/minor-fixing
fix: fix typo spelling grammar
2021-08-07 10:57:08 -05:00
slowy07
1e621e8278 fix: fix typo spelling grammar 2021-08-07 22:25:26 +07:00
Grant Sanderson
31119b630e Merge pull request #1592 from AStarySky/patch-1
fix put_start_and_end_on
2021-08-06 10:25:46 -07:00
AStarySky
b0fd520382 Update mobject.py
emmm i forgot to swap those
2021-08-04 23:38:21 +08:00
AStarySky
c1e14ef5b6 Update mobject.py 2021-08-04 23:32:59 +08:00
AStarySky
e9470b6bde Update mobject.py 2021-08-04 23:04:35 +08:00
AStarySky
5c0a1e4b76 fix put_start_and_end_on 2021-08-04 22:52:13 +08:00
Grant Sanderson
121e6215f8 Merge pull request #1591 from TonyCrane/improve-scale
Improve `Mobject.scale`
2021-08-03 13:37:18 -07:00
TonyCrane
3d5642f3d7 little improvement to Mobject.scale 2021-08-03 15:25:13 +08:00
TonyCrane
9df58e4ddf change version 2021-07-28 23:18:24 +08:00
TonyCrane
f09092024f Merge branch 'master' of https://github.com/3b1b/manim 2021-07-28 23:15:03 +08:00
TonyCrane
4d65c97965 allow sound_file_name to be taken in without extensions 2021-07-28 23:13:15 +08:00
TonyCrane
76966064ce update docs 2021-07-28 23:12:45 +08:00
Grant Sanderson
152d03ed27 Merge pull request #1587 from 3b1b/some1-video-changes
Some1 video changes
2021-07-28 07:54:27 -07:00
Grant Sanderson
8624168ed9 Merge branch 'master' into some1-video-changes 2021-07-28 07:53:04 -07:00
Grant Sanderson
354db4423f Merge pull request #1578 from nutanstrek/patch-1
Minor fix for zooming
2021-07-28 07:50:42 -07:00
Grant Sanderson
27344249de Merge pull request #1566 from pdcxs/patch-2
Add frame to the scene when initialization
2021-07-28 07:48:02 -07:00
Grant Sanderson
0b3a1b271c Merge pull request #1565 from 3b1b/fix-package-versioning
Transition build method to PEP 517
2021-07-28 07:47:18 -07:00
Grant Sanderson
fd8904ec83 Merge pull request #1557 from naveen521kk/add-markuptext
Add MarkupText
2021-07-28 07:45:50 -07:00
Grant Sanderson
7da6179493 Merge pull request #1586 from Wallbreaker5th/master
Fix triangulation
2021-07-28 07:43:42 -07:00
Grant Sanderson
17452dcd10 Changing plane defaults 2021-07-28 07:32:45 -07:00
Grant Sanderson
2f5acc6a87 Small refactor 2021-07-28 07:32:16 -07:00
Grant Sanderson
71f018dfff Add TrueDot 2021-07-28 07:31:31 -07:00
Grant Sanderson
b3ae517a05 Take in u_range and v_range as arguments to ParametricSurface 2021-07-28 07:31:10 -07:00
Grant Sanderson
f7bb5c1b8c If there is multisampling, don't have an antialias width 2021-07-28 07:30:13 -07:00
Grant Sanderson
a3227dda67 Small formatting fix 2021-07-28 07:29:43 -07:00
Wallbreaker5th
2ed78c6e0f Rewrite earclip_triangulation 2021-07-28 17:06:43 +08:00
TonyCrane
8aa004b0b1 use jsdelivr cdn for assets in docs 2021-07-18 22:22:52 +08:00
鹤翔万里
45938dd76f Merge pull request #944 from Lalourche/fix-counting
Fixed execution of counting.py
2021-07-17 22:19:23 -05:00
Darylgolden
3fe4d6d2d4 Add clarification on versions (#1580)
* Clarification on versions

* Grammar

* add clarification on package names

Co-authored-by: 鹤翔万里 <tonycrane@foxmail.com>
2021-07-18 10:58:48 +08:00
鹤翔万里
a18600e8a4 Merge pull request #1579 from Darylgolden/patch-1
Update Discord link
2021-07-17 21:51:33 -05:00
Darylgolden
700418a79c Update Discord link 2021-07-17 13:50:54 +08:00
Paras Sharma
4940ccac7d Minor fix for zooming
It's weird that when you Scroll Up, the interactive shell zooms out.

So to fix this replace factor -> 1/factor .
2021-07-14 13:56:20 +05:30
Grant Sanderson
17d7f0b6f0 Update README.md 2021-07-04 09:22:25 -07:00
Eric Brown
275cf94b06 Add frame to the scene when initialization
If we add an updater to the frame of the camera, and have not added the frame into the scene before, the updater will not work. So, I suggest to add the frame to the objects of the scene at the initilization stage.
2021-06-29 23:03:08 +08:00
TonyCrane
54fff5523b change default font size of ControlsExample 2021-06-29 20:55:25 +08:00
TonyCrane
5707585d17 fix typo 2021-06-26 17:45:21 +08:00
TonyCrane
0305582e64 update GitHub workflow 2021-06-26 12:37:57 +08:00
TonyCrane
a4c3bb03d1 update packaging method 2021-06-26 12:23:14 +08:00
TonyCrane
b00d718431 Merge branch 'master' of https://github.com/3b1b/manim 2021-06-21 13:38:41 +08:00
TonyCrane
6da5d4c8f6 update manim-kindergarten's link 2021-06-21 13:34:10 +08:00
sahilmakhijani
01670cf823 Fix ControlsExample Scene (#1551) 2021-06-20 15:37:06 +08:00
Naveen M K
5986d0e7d2 Add MarkupText
This would use a Pango specific markup which looks like html.

There are some specific implementation here about `<color>`
and `<gradient>`
Pango doesn't support `<gradient>`  or `<color> ` instead it works
with `color` attribute and gradient isn't supported.
Since, `SVGMobject` doesn't know about parsing colors from SVG image
and implmentation of `<color>` and `<gradient>` is added.

Co-authored-by: Philipp Imhof <52650214+PhilippImhof@users.noreply.github.com>
Signed-off-by: Naveen M K <naveen@syrusdark.website>
2021-06-20 01:13:13 +05:30
Grant Sanderson
d384fc1e27 Merge pull request #1552 from Wallbreaker5th/master
Temporary hack for showing text correctly
2021-06-19 09:53:24 -07:00
Grant Sanderson
8aedb8f33e Merge branch 'master' into master 2021-06-19 09:48:53 -07:00
Grant Sanderson
bccc17a3ac Merge pull request #1555 from 3b1b/revert-1543-master
Scale `Text` correctly | Revert "Fixed the default size of Text"
2021-06-19 09:30:40 -07:00
TonyCrane
892df54c9f remove lsh in OpeningManimExample 2021-06-19 20:13:41 +08:00
TonyCrane
663c57ba74 a little fix to TEXT_MOB_SCALE_FACTOR 2021-06-19 19:33:53 +08:00
TonyCrane
26e9b9cd7c added the missing import line in mobject.py 2021-06-19 18:30:23 +08:00
Wallbreaker5th
a99ccea02c Add some comments about the temporary hack 2021-06-19 16:00:39 +08:00
TonyCrane
892ce2db09 update docs 2021-06-19 13:21:25 +08:00
鹤翔万里
d14f22c5ba Revert "Fixed the default size of Text" 2021-06-19 13:11:36 +08:00
Grant Sanderson
846c10a0ff Merge pull request #1543 from TonyCrane/master
Fixed the default size of Text
2021-06-18 12:28:33 -07:00
Grant Sanderson
128178b46e Merge branch 'master' into master 2021-06-18 12:25:00 -07:00
Grant Sanderson
b4f23e8d8e Merge pull request #1553 from naveen521kk/fix-text
Scale Text Correctly
2021-06-18 12:14:32 -07:00
Naveen M K
5765ab9055 Move 0.3 constant to DEFAULT_LINE_SPACING_SCALE 2021-06-19 00:43:01 +05:30
Naveen M K
6eb7edc664 Scale Text Correctly
Change TEXT_MOB_SCALE_FACTOR value
Also deprecate `size` parameter

Also, now text isn't scaled when increasing font size
instead it is passed to the underlying enging
for handling. Though always a Text object is scaled
with a default value so that it fits the screen.

Signed-off-by: Naveen M K <naveen@syrusdark.website>
2021-06-18 17:59:15 +05:30
Wallbreaker5th
e836c3bb42 Temporary hack for showing text correctly 2021-06-18 14:43:09 +08:00
Grant Sanderson
5ff8e28ba5 Change suspend_mobject_updating default 2021-06-16 10:33:06 -07:00
Grant Sanderson
6dc1ecb00a Merge branch 'master' of github.com:3b1b/manim 2021-06-15 21:45:25 -07:00
Grant Sanderson
be78f5257a Ensure images used for textures are RGBA 2021-06-15 21:45:13 -07:00
Grant Sanderson
798479536d Merge pull request #1545 from TonyCrane/fix-example-scenes
Fix example scenes
2021-06-15 11:16:37 -07:00
TonyCrane
226df63d0b update doc videos 2021-06-15 19:54:53 +08:00
TonyCrane
b8fb69773e fix example scenes 2021-06-15 19:20:19 +08:00
TonyCrane
fec2306f9a update docs 2021-06-15 19:16:30 +08:00
TonyCrane
17d75bd336 Fixed the size of Text on different machines 2021-06-15 18:14:06 +08:00
鹤翔万里
23662d093f Merge branch '3b1b:master' into master 2021-06-15 17:48:25 +08:00
Grant Sanderson
34d4689672 Merge pull request #1541 from 3b1b/quick-eigen-video
Quick eigen video
2021-06-14 09:57:57 -07:00
Grant Sanderson
607ef334e9 Fix Lightbulb 2021-06-14 09:56:35 -07:00
Grant Sanderson
b4b4d39ec5 Fixes issues #1436 2021-06-14 09:55:40 -07:00
Grant Sanderson
1c2942798e Merge branch 'master' of github.com:3b1b/manim into quick-eigen-video 2021-06-14 09:54:20 -07:00
Grant Sanderson
e9ea5fbea0 Merge pull request #1481 from libinglong/lbl-fix-tex
fix issue #1480
2021-06-14 09:50:20 -07:00
Grant Sanderson
7ecfc041b3 Merge pull request #1538 from manim-kindergarten/shaders
Added some features including --config_file CLI flag and tip_style
2021-06-14 09:47:50 -07:00
Grant Sanderson
44a9c6337e Merge pull request #1530 from Wallbreaker5th/master
Modified the shaders slightly
2021-06-14 09:44:01 -07:00
Grant Sanderson
d1a5089acc Merge pull request #1529 from calvinpelletier/window_size_bug_fix
fix issue #1509
2021-06-14 09:42:41 -07:00
TonyCrane
9e5f39a4a9 update docs 2021-06-14 16:36:16 +08:00
TonyCrane
6da93cde7b clean .gitignore 2021-06-14 16:25:30 +08:00
TonyCrane
6340db1076 small improvement to config_file 2021-06-14 16:21:38 +08:00
TonyCrane
f45d81be11 some improvement to tip
rename tip_look to tip_style
set the default of tip_style to 0
2021-06-14 16:13:53 +08:00
鹤翔万里
baa2adc128 Merge branch '3b1b:master' into shaders 2021-06-14 13:49:49 +08:00
TonyCrane
f16277f100 some fixes of doc 2021-06-14 13:30:37 +08:00
TonyCrane
876f06cc37 add window_position to config guide 2021-06-14 08:29:38 +08:00
TonyCrane
f682bf97e3 Merge branch 'master' of https://github.com/3b1b/manim 2021-06-14 07:55:24 +08:00
TonyCrane
025639f026 update doc 2021-06-14 07:55:17 +08:00
widcardw
e885ec6ecd Fix the color of tip 2021-06-13 21:07:25 +08:00
GZTime
3b3150c3c5 Merge branch 'shaders' of https://github.com/manim-kindergarten/manim into shaders 2021-06-12 22:05:26 +08:00
GZTime
33aa4e979a Merge remote-tracking branch 'upstream/master' into shaders 2021-06-12 22:04:28 +08:00
鹤翔万里
9de7a6477d Merge branch '3b1b:master' into shaders 2021-06-12 22:00:08 +08:00
鹤翔万里
19b8057136 Merge pull request #1521 from naveen521kk/patch-1
requirements.txt: manimpango v0.3.0
2021-06-12 20:29:52 +08:00
鹤翔万里
b6dd6fe16d Merge pull request #1499 from jamilgafur/patch-1
Update quickstart.rst
2021-06-12 19:28:41 +08:00
鹤翔万里
51b2984ee3 Merge pull request #1488 from libinglong/lbl-fix-document
Fix document. Fix the mismatch between code and video
2021-06-12 18:31:43 +08:00
鹤翔万里
957eedc32c Merge pull request #1477 from giacomo-b/readme-fix
Update README.md
2021-06-12 18:21:08 +08:00
鹤翔万里
2614b34d11 Merge branch 'master' into readme-fix 2021-06-12 18:20:41 +08:00
鹤翔万里
4ea1d6d64f Merge pull request #1475 from CodingPower472/master
Fix typo in README
2021-06-12 18:18:18 +08:00
鹤翔万里
fd67858bb0 Merge pull request #1467 from alessandro-gentilini/patch-1
Typo
2021-06-12 18:06:03 +08:00
Wallbreaker5th
442e7fc14d Use focal_distance as camera_distance in shaders. 2021-06-05 17:43:32 +08:00
Wallbreaker5th
bb27a78449 fix: checking whether normal is facing the camera. 2021-06-05 17:33:54 +08:00
Calvin Pelletier
a06d5613f4 fix issue #1509 2021-06-04 17:07:41 -07:00
Naveen M K
6605ab75e8 requirements.txt: manimpango v0.3.0 is supported
it should work as there are no breaking changes for the API used here
I should bring in MarkupText here...
2021-05-24 22:25:08 +05:30
GZTime
ed9a4bd9eb Merge remote-tracking branch 'upstream/master' into shaders 2021-05-14 16:42:07 +08:00
Grant Sanderson
d54b796154 Change default to non-flat stroke 2021-05-07 16:07:49 -07:00
Grant Sanderson
bb72718c3b Merge branch 'master' of github.com:3b1b/manim 2021-04-28 08:51:09 -07:00
Grant Sanderson
d279272762 Small cleanup for TexMobject, and remove {{ }} separation convention 2021-04-28 08:50:50 -07:00
jamilgafur
f2f652f85d Update quickstart.rst
Removed extra left side curly bracket in embed section
2021-04-25 09:58:04 -05:00
libinglong
bf9d797d84 fix the mismatch between code and video 2021-04-20 15:59:07 +08:00
libinglong
29e5a8bc90 fix issue #1480 2021-04-17 22:30:08 +08:00
giacomo-b
02bad81fc3 Update README.md 2021-04-17 10:37:20 +02:00
CodingPower472
2bfe7e08ff Fix typo in README 2021-04-16 09:21:28 -06:00
widcardw
e727faaccb Add a custom style to ArrowTip. 2021-04-13 17:40:48 +08:00
GZTime
6b911f5721 Merge remote-tracking branch 'upstream/master' into shaders 2021-04-12 00:35:54 +08:00
鹤翔万里
565ff09d58 Update chinese docs' link 2021-04-11 19:24:40 +08:00
鹤翔万里
4b4a973464 Re-run Action 2021-04-11 19:21:43 +08:00
鹤翔万里
8e2799a499 Merge pull request #1469 from naveen521kk/patch-1
CI: install pango so that manimpango install
2021-04-11 19:18:46 +08:00
Naveen M K
a44e230a07 CI: install pango so that manimpango install
https://github.com/ManimCommunity/ManimPango/issues/53
2021-04-11 16:45:03 +05:30
Alessandro Gentilini
f9fb68c011 Typo 2021-04-10 14:18:47 +02:00
GZTime
c1ad893030 Fix a wrong function name. 2021-04-09 22:06:20 +08:00
GZTime
65d0826b91 Update config.py to load config file manually. 2021-04-09 21:32:52 +08:00
GZTime
41120b096e Add support for debugger launch 2021-04-09 20:17:21 +08:00
GZTime
1f6e911d60 Merge remote-tracking branch 'upstream/master' into shaders 2021-04-09 20:09:43 +08:00
Grant Sanderson
c45ff910f0 Remove double brace convention, since it causes errors with a number of tex strings 2021-04-08 14:46:03 -07:00
Grant Sanderson
15760cf253 Merge branch 'master' of github.com:3b1b/manim 2021-04-08 14:32:07 -07:00
Grant Sanderson
f6291d7e82 Merge pull request #1421 from naveen521kk/patch-6
update docs for linux installation
2021-04-08 14:23:28 -07:00
Grant Sanderson
b5e6177afd Merge pull request #1408 from Eisenwave/patch-1
Fix typo in README.md
2021-04-08 14:23:02 -07:00
Grant Sanderson
22d9c57f60 Merge pull request #1419 from JWro/patch-1
Fix init of Elbow super class
2021-04-08 14:22:47 -07:00
Grant Sanderson
3a992e136d Merge pull request #1437 from williamclavier/patch-1
Fix typo in example_scenes.py
2021-04-08 14:22:25 -07:00
Grant Sanderson
12ef0a26d7 Fix chaining animation in example scenes 2021-04-08 14:20:37 -07:00
Grant Sanderson
7a11e3d20f Merge pull request #1464 from 3b1b/matrix-exp-development
Matrix exp development
2021-04-08 14:18:25 -07:00
Grant Sanderson
cf63dfddf9 Fix Lighthouse 2021-04-08 14:14:32 -07:00
Grant Sanderson
42d8888f8e Allow any VMobject to be passed into TransformMatchingTex, so that slicing into Tex works 2021-03-31 23:28:49 -07:00
Grant Sanderson
322f138490 Add CameraFrame.reorient for quicker changes to frame angle 2021-03-31 23:27:12 -07:00
Grant Sanderson
df657c06c2 Add (admitedly silly) RADIANS constant 2021-03-31 23:26:35 -07:00
Grant Sanderson
0c61c908b2 Small fixes to Axes defaults 2021-03-31 23:26:10 -07:00
Grant Sanderson
82658e1db3 Change default element alignment for integer matrices 2021-03-31 23:25:43 -07:00
Grant Sanderson
de9ecbd766 Remove unnecessary import 2021-03-31 23:24:55 -07:00
Grant Sanderson
ca9f4357fa Allow configuration in Brace.get_text 2021-03-31 23:23:34 -07:00
Grant Sanderson
e95aa69c4c Change arg_separator default 2021-03-31 23:22:54 -07:00
Grant Sanderson
6997cc9501 Have Mobject.match_points return self 2021-03-27 11:57:50 -07:00
Grant Sanderson
7f47815230 Change some defaults and add Matrix.get_rows method 2021-03-27 11:56:58 -07:00
Grant Sanderson
d3e61b962b Have DecimalNumber match full family style when setting a new value 2021-03-27 11:56:36 -07:00
Grant Sanderson
8999ebb556 Also look for jpegs 2021-03-27 11:55:58 -07:00
Grant Sanderson
88f0c24c69 Decompose ellipse manipulations 2021-03-24 14:00:46 -07:00
Grant Sanderson
09579fcd3e Not a great long-term fix, but flipping should always refresh the triangulation 2021-03-24 13:58:52 -07:00
Grant Sanderson
01d989ba23 Fix a bug for off-center vector fields 2021-03-24 13:58:18 -07:00
Grant Sanderson
6c3e4b94ea Add min_scale_factor to keep Mobjects from shrinking to 0, and hence losing all shape information, unless its purposeful 2021-03-23 08:50:10 -07:00
Grant Sanderson
52baf5b7c2 Change matrix entry alignment default 2021-03-23 08:46:13 -07:00
Grant Sanderson
fd18e4a21f Fixed missing arg in self.get_parts_by_text 2021-03-19 10:55:04 -07:00
Grant Sanderson
2a1b023442 Merge branch 'master' of github.com:3b1b/manim into matrix-exp-development 2021-03-18 17:44:21 -07:00
Grant Sanderson
288983e7b9 Make sure mobject data gets unlocked after animations 2021-03-18 17:43:15 -07:00
Grant Sanderson
f6ff070a8e Add FlashAround and FlashUnder 2021-03-18 17:42:47 -07:00
Grant Sanderson
5126dd1f52 New defaults for FullScreenRectangle 2021-03-18 17:42:19 -07:00
Grant Sanderson
8345ca6160 Small fixes to NumberLine 2021-03-18 17:37:12 -07:00
Grant Sanderson
611ac7f448 Update to Cross to make it default to variable stroke width 2021-03-18 17:36:46 -07:00
Grant Sanderson
933b7fd3da Use Text not TexText for Brace 2021-03-18 17:35:23 -07:00
Grant Sanderson
15f3b359ae Added Text.get_parts_by_text 2021-03-18 17:34:57 -07:00
Grant Sanderson
0e326c7ac5 Return stroke_width as 1d array 2021-03-18 17:34:36 -07:00
Grant Sanderson
ed2e3e80d9 Updates to VectorField 2021-03-18 17:34:16 -07:00
Grant Sanderson
3c240478b8 Tiny format change 2021-03-18 17:33:20 -07:00
Grant Sanderson
120d26defa If chosen monitor is not available, choose one that does exist 2021-03-18 17:32:45 -07:00
William Clavier
5c427ea287 Fixed typo in example_scenes.py 2021-03-07 22:19:01 -05:00
Naveen M K
503bd116a6 link to manimpango 2021-03-01 12:11:44 +05:30
Naveen M K
f5d5565af1 Update installation.rst 2021-03-01 12:08:36 +05:30
Naveen M K
aedf5633aa update docs for linux installation 2021-02-26 22:31:22 +05:30
JWro
63b497c352 Fix init of Elbow super class 2021-02-26 10:46:19 +01:00
Grant Sanderson
531a031b50 Merge pull request #1415 from 3b1b/matrix-exp-development
Matrix exp development
2021-02-25 08:52:29 -08:00
Grant Sanderson
b48ce3f1de Remove whitespace 2021-02-25 08:48:50 -08:00
Grant Sanderson
5636b41dfd bug fix for resize_with_interpolation in the case of length=0 2021-02-25 08:48:41 -08:00
Grant Sanderson
402c06c99a Allow 3b1b_colormap as an option for get_colormap_list 2021-02-25 08:48:22 -08:00
Grant Sanderson
eec396681c Updated VectorField and StreamLines 2021-02-25 08:47:29 -08:00
Grant Sanderson
d06b3769b8 Added Mobject.set_color_by_rgba_func 2021-02-25 08:46:56 -08:00
Grant Sanderson
8fcb069808 Added some methods to coordinate system to access all axes ranges 2021-02-25 08:45:49 -08:00
Grant Sanderson
9fb6280f1d Added colormap 2021-02-25 08:45:15 -08:00
Grant Sanderson
e35f8466be Added VShowPassingFlash 2021-02-25 08:45:03 -08:00
Eisenwave
44df81fd70 fix typo 2021-02-24 18:35:22 +01:00
Grant Sanderson
d1fc6c8ed7 Merge branch 'master' of github.com:3b1b/manim 2021-02-23 12:01:00 -08:00
Grant Sanderson
9d1c8df095 Merge pull request #1398 from casperdcl/tqdm-fixes
progress fixes
2021-02-23 12:00:31 -08:00
Grant Sanderson
1d0b864001 Merge pull request #1395 from naveen521kk/patch-6
register_font is available for macOS
2021-02-23 11:59:42 -08:00
Grant Sanderson
5008e20b8e Tiny PEP fix 2021-02-23 11:59:08 -08:00
Casper da Costa-Luis
c92b6dbd0b correct ascii fallback 2021-02-19 17:04:29 +00:00
Casper da Costa-Luis
9c23a5feef remove unused requirement 2021-02-19 17:04:00 +00:00
Naveen M K
ba3bb64bce register_font is available for macOS
https://github.com/ManimCommunity/ManimPango/pull/26
2021-02-19 00:49:50 +05:30
Tony031218
448d792473 unspecify the version in setup.cfg 2021-02-15 12:56:58 +08:00
Tony031218
2f202e26b2 update docs for pip install 2021-02-15 12:23:53 +08:00
Tony031218
f9b1167d14 remove cairo dependency in docs 2021-02-14 23:16:50 +08:00
Tony031218
4179c1c3e9 fix bug in example_scenes 2021-02-14 23:12:25 +08:00
鹤翔万里
0c25b56afe Update 2021-02-14 21:30:08 +08:00
Tony031218
0f95e80798 update docs workflow 2021-02-14 21:23:51 +08:00
鹤翔万里
b7e2abb801 Merge pull request #1386 from cigar666/patch-2
Update changing.py
2021-02-13 21:15:24 +08:00
cigar666
1543450a4f Update changing.py
To fix the error of "AttributeError: 'TracedPath' object has no attribute 'n_points_per_cubic_curve'" (because in the CONFIG dictionary of VMobject class, the n_points_per_cubic_curve dose not exist, and now 'n_points_per_curve' is used instead)
2021-02-13 21:07:00 +08:00
Tony031218
c9e223485c fix Text incorrect coloring 2021-02-13 17:51:43 +08:00
Grant Sanderson
9bf51bda02 Remove unnecessary import 2021-02-12 13:34:50 -08:00
Grant Sanderson
a46b7d6931 Fix window size issue 2021-02-12 13:34:33 -08:00
Grant Sanderson
8f502f2790 Small style changes 2021-02-12 13:34:16 -08:00
Grant Sanderson
c30b535504 Small tweak to Example scene 2021-02-12 13:33:55 -08:00
Grant Sanderson
a5d5e40f6a Merge pull request #1383 from naveen521kk/manimpango
Use ManimPango for Text rendering
2021-02-12 13:15:40 -08:00
Syrus Dark
ad332c5863 Use manimpango for Text rendering 2021-02-12 12:28:08 +05:30
Grant Sanderson
96d9a66faf Merge branch 'master' of github.com:3b1b/manim 2021-02-11 19:31:16 -08:00
Grant Sanderson
368a6c3d1c Include from manimlib.mobject.interactive import * 2021-02-11 19:31:00 -08:00
Tony031218
0c3b401d34 fix docs 2021-02-12 09:21:14 +08:00
Grant Sanderson
9df136c723 Remove color definition redundancy 2021-02-11 12:24:06 -08:00
Grant Sanderson
e1e7b1e6c1 Changes to make reduce the time of from manimlib import * 2021-02-11 12:22:37 -08:00
Grant Sanderson
e7240547fb Small reorderings 2021-02-11 12:20:17 -08:00
Grant Sanderson
9158b7a0c2 Include from manimlib.window import * 2021-02-11 11:01:36 -08:00
Grant Sanderson
dba0550da5 Merge branch 'TonyCrane-package-improve' 2021-02-11 10:54:30 -08:00
Grant Sanderson
5df4e68f1b Remove from manimlib.mobject.interactive import * 2021-02-11 10:15:28 -08:00
Grant Sanderson
787b3be357 Make sure VMobject.set_fill returns self 2021-02-10 16:57:41 -08:00
Grant Sanderson
c700a27cad Remove alignment_vect, as per #1353 2021-02-10 16:49:23 -08:00
Grant Sanderson
d7f3f5ad24 Buf fixes for #1378 2021-02-10 16:45:23 -08:00
Grant Sanderson
1798875396 Call Window.init_mgl_context and reorder Window.__init__ 2021-02-10 14:48:00 -08:00
Grant Sanderson
0cd0a56243 Merge branch 'package-improve' of https://github.com/TonyCrane/manim into TonyCrane-package-improve 2021-02-10 14:00:25 -08:00
Grant Sanderson
6e2dcae4d7 Fix InteractiveDevlopmentExample bug 2021-02-10 13:54:01 -08:00
Grant Sanderson
17b2efeb71 Move where the Mobject.animate method lives 2021-02-10 13:49:09 -08:00
Grant Sanderson
4ff876b536 Merge pull request #1379 from friedkeenan/3b1b-animate
Add .animate syntax
2021-02-10 13:43:08 -08:00
friedkeenan
cbe24daa98 Fix mistake 2021-02-10 15:38:31 -06:00
Grant Sanderson
fdb6673238 Merge branch 'master' of github.com:3b1b/manim 2021-02-10 13:37:51 -08:00
Grant Sanderson
156b83c38e Change window size if it's passed in 2021-02-10 13:37:09 -08:00
friedkeenan
2d83cccc0a Merge 3b1b/master 2021-02-10 09:40:16 -06:00
friedkeenan
cfd32c79b1 Switch old syntax for animating methods to .animate syntax 2021-02-10 09:10:31 -06:00
friedkeenan
d24ba30fde Add .animate syntax 2021-02-10 07:43:46 -06:00
Tony031218
558f2652a4 fix typo in docs 2021-02-10 11:15:48 +08:00
Tony031218
de3916424f fix x/y_range of CoordinateSystem 2021-02-10 11:03:07 +08:00
Tony031218
3bf956871b update docs 2021-02-10 11:02:18 +08:00
Grant Sanderson
84f032610f Also search for images where the extension is passed in 2021-02-09 16:56:47 -08:00
Grant Sanderson
36e8421395 Let the user specify which monitor the window should show up in 2021-02-09 10:53:26 -08:00
Grant Sanderson
3770fae6cf Small change for readability 2021-02-09 10:52:45 -08:00
鹤翔万里
ddda43e03e update 2021-02-09 09:21:29 +08:00
Grant Sanderson
cb4b67655b Merge branch 'package-improve' of https://github.com/TonyCrane/manim into TonyCrane-package-improve 2021-02-08 10:01:26 -08:00
Tony031218
7c683c8992 updte default universal_import_line 2021-02-08 12:25:26 +08:00
Tony031218
6331f76c12 import numpy in example_scenes 2021-02-08 12:22:34 +08:00
Tony031218
944128d9bf adjust the order of arguments in config 2021-02-08 12:16:57 +08:00
Grant Sanderson
b374a07d76 Merge branch 'package-improve' of https://github.com/TonyCrane/manim into TonyCrane-package-improve 2021-02-07 20:05:20 -08:00
Tony031218
24d9d9e45d update docs 2021-02-08 12:04:29 +08:00
Tony031218
f0cbc0571f Update README 2021-02-08 11:42:50 +08:00
Tony031218
608b2d9bce delete comment 2021-02-08 10:46:11 +08:00
Tony031218
47d4b0236e readd default_config and improve config guide 2021-02-08 10:29:18 +08:00
Grant Sanderson
41a02285bd Small cleanup 2021-02-07 18:14:35 -08:00
Grant Sanderson
00e9c426ff Fix Surface.pointwise_become_partial bug 2021-02-07 18:14:23 -08:00
Tony031218
69235f0a21 remove non-manim lib in __init__.py 2021-02-08 09:55:30 +08:00
Grant Sanderson
e8f288f753 Fix for ShowCreation on SGroups, like Cube 2021-02-07 17:52:56 -08:00
Grant Sanderson
1084dfb681 Partial fix for Surface.pointwise_become_partial, and hence for ShowCreation() on surfaces 2021-02-07 17:46:04 -08:00
Grant Sanderson
12e8506841 Added example scenes for graphing and using CoordinateSystems 2021-02-07 17:31:31 -08:00
Grant Sanderson
f984443ed5 CoordinateSystem updates 2021-02-07 17:31:14 -08:00
Grant Sanderson
479aac1988 Add Line.get_projection method 2021-02-07 17:30:49 -08:00
Grant Sanderson
97e7b0568e Add default font_size to NumberLine.add_numbers 2021-02-07 17:30:31 -08:00
Grant Sanderson
9a79043640 Change threshold for treating quadratic bezier curves as lines 2021-02-07 17:29:45 -08:00
Grant Sanderson
4d644538b1 Merge branch 'package-improve' of https://github.com/TonyCrane/manim into TonyCrane-package-improve 2021-02-07 10:00:46 -08:00
Grant Sanderson
95191325e8 Merge branch 'master' of github.com:3b1b/manim 2021-02-07 09:56:40 -08:00
Grant Sanderson
700d7c6def Axes.get_v_line_to_graph and Axes.get_h_line_to_graph 2021-02-07 09:56:28 -08:00
Tony031218
36107c28ef update README 2021-02-07 21:43:20 +08:00
Tony031218
00fe33957c rename custom_defaults -> custom_config defaults -> default_config 2021-02-07 21:38:19 +08:00
Tony031218
cbe016391b delete old entry point file and add __init__ for folders 2021-02-07 17:48:51 +08:00
Tony031218
3fa68ad60c add config file to .gitignore 2021-02-07 17:46:33 +08:00
Tony031218
e3d09d161c add auto config guide 2021-02-07 17:45:18 +08:00
Tony031218
2394bdc2e6 refactor __init__.py and __main__.py 2021-02-07 17:43:05 +08:00
鹤翔万里
634c3d672e Merge pull request #3 from 3b1b/master
Update
2021-02-07 10:53:58 +08:00
Tony031218
b558ae98cf rename pypi package and entry_points 2021-02-07 10:27:41 +08:00
Grant Sanderson
e6fc323b6d Some changes to get_graph_label defaults 2021-02-06 11:39:39 -08:00
Grant Sanderson
c3ccfbfa65 re-introduce make_smoothing option 2021-02-06 11:39:19 -08:00
Grant Sanderson
6f69902892 Changed how configuration for labels on a NumberLine, and hence also on Axes, so that it takes in DecimalNumber configuration directly rather than as a separte dict. 2021-02-06 11:06:38 -08:00
Grant Sanderson
1a5a59f40e Merge branch 'master' of github.com:3b1b/manim 2021-02-06 10:37:26 -08:00
Grant Sanderson
2493458e45 Merge pull request #1364 from abhi-6988/fix-3d_vectors
Fix Vector orientation in 3d
2021-02-06 09:08:19 -08:00
Grant Sanderson
1ab60f1c3e Merge pull request #1362 from abhi-6988/fix-unit_size
Fix NumberLine's unit_size
2021-02-06 09:05:21 -08:00
Abhijith Muthyala
e677f4027a Fix Vector orientation in 3d 2021-02-06 21:28:53 +05:30
Abhijith Muthyala
03bea8198c Fix NumberLine's unit_size 2021-02-06 15:05:18 +05:30
Grant Sanderson
28650b27dc Move reconfigurable_scene.py to once_useful_constructs 2021-02-05 21:34:15 -08:00
Grant Sanderson
2c55f93512 Move (some) functionality from GraphScene to CoordinateSystem 2021-02-05 21:32:28 -08:00
Grant Sanderson
567e62de03 Remove unused min_samples argument 2021-02-05 21:30:38 -08:00
Grant Sanderson
a2f201f59e Small changes to Homotopy animations 2021-02-05 19:58:29 -08:00
Grant Sanderson
514301e0af Allow make_smooth and other kwargs for VMobject.apply_function 2021-02-05 19:58:02 -08:00
Grant Sanderson
71f328c7ef Factor out approximate smoothing to VMobject.make_approximately_smooth function 2021-02-05 19:48:43 -08:00
Grant Sanderson
66817c4e2b Add alternate smoothing options 2021-02-05 16:29:07 -08:00
Grant Sanderson
f87b82a9e9 Merge pull request #1336 from TonyCrane/publish
Package manimlib and automatically publish to pypi
2021-02-05 16:17:32 -08:00
Grant Sanderson
2a3db89a2d merge 2021-02-05 15:29:18 -08:00
Grant Sanderson
a63dd119c1 Change OpeningManimExample 2021-02-05 15:27:48 -08:00
Grant Sanderson
f786eb68d1 Change default decimal_number_config for NumberLine 2021-02-05 15:27:29 -08:00
Grant Sanderson
25cd846356 Fix and simplify get_smooth_quadratic_bezier_handle_points so that VMobject.make_smooth works better 2021-02-05 15:25:17 -08:00
Grant Sanderson
7a44d66ebc Merge pull request #1355 from TonyCrane/fix-numberline
Fix GraphScene and NumberLine
2021-02-05 14:51:47 -08:00
Grant Sanderson
4de31aba7f Merge pull request #1356 from sahilmakhijani/master
Fixed prompt_user_for_choice and added number support
2021-02-05 14:49:35 -08:00
Grant Sanderson
43614394a4 Set mob.make_smooth_after_applying_functions to True when preparing for a nonlinear transformation 2021-02-05 13:06:00 -08:00
Grant Sanderson
ed0ac3bee4 Updated README 2021-02-05 11:02:28 -08:00
Grant Sanderson
94894c0fe3 Merge pull request #1357 from parmentelat/master
handle_play_like_call decorator to use functools.wraps
2021-02-05 10:12:14 -08:00
Thierry Parmentelat
f05f94fbf5 spreading the change onto 2 more decorators 2021-02-05 11:52:21 +01:00
Thierry Parmentelat
e7251bcc2f handle_play_like_call decorator to use functools.wraps
this way, decorated methods - typically Scene.play - have a decent docstring
so first-time users can use help()
2021-02-05 11:10:17 +01:00
Sahil Makhijani
c0f6e94545 Removed unused import that was added by IDE autocomplete!! 2021-02-05 13:11:26 +05:30
Sahil Makhijani
390bfac9df prompt_user_for_choice now prompts for Scene Name or Number 2021-02-05 13:09:03 +05:30
Tony031218
269128dfb6 fix NumberLine and GraphScene 2021-02-05 13:57:00 +08:00
Grant Sanderson
8f52c7bda8 - 2021-02-04 12:37:16 -08:00
Grant Sanderson
5eafed2c31 Make ParametricSurface a subclass of Surface, and reframe other 3d mobjects to subclass Surface instead of ParametricSurface 2021-02-04 12:36:35 -08:00
Grant Sanderson
4b6a3a2599 Code cleanup 2021-02-04 12:35:45 -08:00
鹤翔万里
0e5423807c Merge pull request #1351 from pedrommaiaa/master
Grammar correction
2021-02-04 22:47:08 +08:00
Pedro Maia
60605e8442 Merge pull request #1 from pedrommaiaa/pedrommaiaa-patch-1
Grammar correction
2021-02-04 11:31:52 -03:00
Pedro Maia
b1efee5088 Grammar correction
mulziple -> multiple, line 35.
2021-02-04 11:30:13 -03:00
鹤翔万里
820e1840d3 Merge pull request #2 from 3b1b/master
Update
2021-02-04 11:27:43 +08:00
Grant Sanderson
10c1f054ca merge 2021-02-03 17:52:27 -08:00
Grant Sanderson
1727d4b86a Small hacky tweak to fix more triangulation issues 2021-02-03 17:52:11 -08:00
鹤翔万里
2d4ffc989e Merge pull request #1175 from Suji04/patch-1
Update imports.py
2021-02-04 09:37:28 +08:00
鹤翔万里
a45e0afe0e Merge pull request #1116 from kcheng0222/patch-1
Fixed typo from "depricated" to "deprecated"
2021-02-04 09:31:27 +08:00
Grant Sanderson
f13c41bcbb DotCloud improvements 2021-02-03 15:58:27 -08:00
Grant Sanderson
65f4f4bd29 Factor out computing bounding box 2021-02-03 15:58:16 -08:00
Grant Sanderson
521e3ef143 Include wait in the embed shortcut commends 2021-02-03 14:19:20 -08:00
Grant Sanderson
7dffa24acd Only reorient points for triangulation if the normal vector is not OUT 2021-02-03 14:18:58 -08:00
Grant Sanderson
0726dccd0a Ensure get_height, etc. all return positive values 2021-02-03 14:18:21 -08:00
Grant Sanderson
003fafc20f Unlock mobject data after Write 2021-02-03 14:17:55 -08:00
Grant Sanderson
d981ee47e2 Shouldn't transform between Text and TexText 2021-02-03 14:17:39 -08:00
Grant Sanderson
46294a5fad Fix aliasing issue on filled VMobject by calling get_unit_normal on reduced control points 2021-02-03 13:41:02 -08:00
Grant Sanderson
d7e63d907a Merge pull request #1305 from diracdeltafunk/patch-1
Fix typo in value_tracker.py
2021-02-03 12:34:55 -08:00
Grant Sanderson
afd1ef65f2 Merge pull request #1333 from asutoshgha/asutoshgha-patch-2
updated installation of manim on macOS
2021-02-03 12:33:58 -08:00
Grant Sanderson
5b9672bb59 Merge pull request #1328 from abhi-6988/fix-redundant_key
Replace redundant CONFIG key in NumberLine
2021-02-03 12:10:02 -08:00
Grant Sanderson
c2b2cb3b7e Merge pull request #1327 from techdude/master
Add CONFIG parameter to allow disabling smoothing on ParametricCurve
2021-02-03 12:09:33 -08:00
Grant Sanderson
c040dba835 Merge pull request #1338 from sahilmakhijani/master
Changed manim downloads location from default to custom_default config
2021-02-03 11:59:09 -08:00
Grant Sanderson
0a5414553f Merge pull request #1343 from TonyCrane/remove-samples
Remove samples
2021-02-03 10:58:30 -08:00
Grant Sanderson
6fde779944 Merge 2021-02-03 10:07:36 -08:00
Grant Sanderson
c8f4c49720 Yet another triangulation fix 2021-02-03 10:07:00 -08:00
鹤翔万里
5e3ed6f860 Merge pull request #1345 from samipism/master
Converted 0 to 0.0 in sdf() and angle_between_vectors()
2021-02-03 20:07:52 +08:00
Samip Poudel
5a16e3a358 Converted 0 to 0.0 in sdf() and angle_between_vectors() 2021-02-03 17:22:28 +05:45
鹤翔万里
fc6953e102 remove samples=1 in window.py 2021-02-03 17:17:55 +08:00
Grant Sanderson
3938f81c1b Performance improvements for Write and DrawBorderWithFill 2021-02-02 16:44:04 -08:00
Grant Sanderson
0c6149c9dd Minor cleanup to triangulation 2021-02-02 16:43:24 -08:00
Grant Sanderson
ddcd052036 Performance improvements for triangulation 2021-02-02 16:26:25 -08:00
Grant Sanderson
2fbe0c6ee6 Performance improvement for triangulation 2021-02-02 16:19:45 -08:00
Grant Sanderson
1097f0df96 Small cleanups 2021-02-02 15:56:55 -08:00
Tony031218
04a259950f update logo image address for better display on pypi 2021-02-03 07:55:39 +08:00
鹤翔万里
37f1130de6 Merge pull request #1 from 3b1b/master 2021-02-03 07:48:13 +08:00
Grant Sanderson
dda9683fb7 merge 2021-02-02 15:36:39 -08:00
Grant Sanderson
729dae1376 Fix triangulation issue for polygons with many holes 2021-02-02 15:35:03 -08:00
Sahil Makhijani
32632367b6 Changed manim downloads location from default to custom_default config 2021-02-03 00:04:30 +05:30
Grant Sanderson
46309e26c7 Merge pull request #1334 from TonyCrane/templates
Update templates of issues and pull requests
2021-02-02 10:04:11 -08:00
Grant Sanderson
dcffbe21d5 Merge pull request #1335 from sahilmakhijani/master
Refactored Event Handling Mechanism
2021-02-02 09:57:55 -08:00
Tony031218
c5b0040166 remove samples to reduce error on some machines 2021-02-02 22:06:23 +08:00
Tony031218
5b6997aea9 add workflow for uploading package to pypi 2021-02-02 21:34:15 +08:00
Tony031218
7a6a8556b8 add global default.yml for packaging 2021-02-02 21:23:16 +08:00
Tony031218
e4df135bbe update setup.cfg 2021-02-02 21:02:28 +08:00
Tony031218
9916f56fb1 fix a bug after packaging 2021-02-02 21:00:36 +08:00
Sahil Makhijani
74365065fe Merge remote-tracking branch 'upstream/master' 2021-02-02 16:05:47 +05:30
Sahil Makhijani
7b614bc968 Refactored Event Dispatching Mechanism 2021-02-02 16:04:50 +05:30
Sahil Makhijani
a4dbd0881b Renamed event folder to event handler 2021-02-02 16:02:10 +05:30
Sahil Makhijani
e9ec5e0c93 Added Concept of Event Listners and Event Dispatcher 2021-02-02 15:59:27 +05:30
Tony031218
143634742b revert changes which is in #1329 2021-02-02 16:56:41 +08:00
Tony031218
c32104b7ca revert changes which is in #1329 2021-02-02 16:53:08 +08:00
Tony031218
2d19ee8264 update PULL_REQUEST_TEMPLATE 2021-02-02 16:45:57 +08:00
Tony031218
f4c82b62af create config.yml and delete old template 2021-02-02 16:39:02 +08:00
鹤翔万里
55e8d3bc55 Update issue templates 2021-02-02 16:31:57 +08:00
鹤翔万里
be5762ba9c Update README.md 2021-02-02 16:17:18 +08:00
ASUTOSH GHANTO
3ec8bb0d28 Update README.md 2021-02-02 13:29:56 +05:30
ASUTOSH GHANTO
98a25eaefe Update README.md
asked changes were made
2021-02-02 13:24:40 +05:30
ASUTOSH GHANTO
fc01239c7a Update README.md
corrected my mistakes in readme
2021-02-02 11:36:01 +05:30
ASUTOSH GHANTO
331e5a1c21 Merge pull request #1 from asutoshgha/asutoshgha-patch-1
Update README.md
2021-02-02 09:13:19 +05:30
ASUTOSH GHANTO
0e80799b1f Update README.md
added content for macOSX
2021-02-02 09:11:42 +05:30
Grant Sanderson
fbb0d76f4f Merge pull request #1326 from sahilmakhijani/master
Interactive Mobjects Performance Improvements
2021-02-01 09:30:04 -08:00
Sahil Makhijani
2061f95ef5 Fixed ControlMobject Typo 2021-02-01 22:55:36 +05:30
鹤翔万里
82eb0ae5be change 0 to 0.0 in quadratic_bezier_fill/frag.glsl 2021-02-01 22:56:03 +08:00
鹤翔万里
5cc30df2ac change 0 to 0.0 in quadratic_bezier_stroke/geom.glsl 2021-02-01 22:55:40 +08:00
Abhijith Muthyala
fb8280171b Replace redundant CONFIG key in NumberLine 2021-02-01 12:25:11 +05:30
techdude
fc482c107f Merge branch 'master' of https://github.com/techdude/manim 2021-01-31 18:52:17 -07:00
techdude
384304e92b Add CONFIG parameter to allow disabling smoothing 2021-01-31 18:48:48 -07:00
Sahil Makhijani
fdcac10861 Commented out self.embed in ControlsExample 2021-02-01 01:41:37 +05:30
Tony031218
fe85d4e02f update icon 2021-01-31 22:32:57 +08:00
Tony031218
8f9ce57de5 update custom_default doc and fix a list 2021-01-31 22:29:19 +08:00
Tony031218
1253c18c54 update example_scenes for AnimatingMethods 2021-01-31 22:03:53 +08:00
Tony031218
3dc0c7b0cb fix search 2021-01-31 21:38:14 +08:00
Tony031218
09ae714edb fix
add a link to Chinese version in home page

fix a list wrong display

fix color list
2021-01-31 21:37:53 +08:00
Sahil Makhijani
d6b23324a6 Interactive Mobjects Performance Improvements 2021-01-31 16:05:55 +05:30
Grant Sanderson
b63ba1c7a4 Merging master (to record a merge) 2021-01-30 23:30:37 -08:00
Grant Sanderson
b00c93dc88 Add AnimatingMethods examples 2021-01-30 22:51:34 -08:00
Grant Sanderson
5fb06e77b5 Don't save triangulations to file, as this introduces unwanted errors 2021-01-30 22:51:15 -08:00
Grant Sanderson
d5d13c3174 Updated TexTransformExample.mp4 and UpdatersExample.mp4 2021-01-30 22:22:35 -08:00
Grant Sanderson
9b3332ad02 Update changed example scenes in docs 2021-01-30 22:20:37 -08:00
Grant Sanderson
3c0f8abe5f Only display writing message when a new tex file is actually being written 2021-01-30 22:12:44 -08:00
Grant Sanderson
53cfbacab4 Improve how brace sets its width 2021-01-30 22:11:48 -08:00
Grant Sanderson
e3b74ffd7a Remove unecessary lines 2021-01-30 22:11:23 -08:00
Grant Sanderson
52dd06ce6f Allow always_redraw to take in arguments 2021-01-30 22:10:58 -08:00
Grant Sanderson
90293f3907 Refresh bounding box after Mobject.become 2021-01-30 22:10:32 -08:00
Grant Sanderson
32e5b2b4b1 Change updater example 2021-01-30 22:10:09 -08:00
Grant Sanderson
c292046913 Have DecimalMobject use Text instead of Tex 2021-01-30 18:13:38 -08:00
Grant Sanderson
73edeaa153 Fix TexTransformExample 2021-01-30 17:52:02 -08:00
Grant Sanderson
375bc2073d Include save_state and restore as shortcut methods during an embed 2021-01-30 17:51:40 -08:00
Grant Sanderson
b353c4f21c Change comment 2021-01-30 17:51:14 -08:00
Grant Sanderson
367e243066 Align families in a way that respects their family heirarchy depth 2021-01-30 17:50:59 -08:00
Grant Sanderson
5a2a363a87 Some cleanup for interactive mobjects 2021-01-28 12:26:05 -08:00
Grant Sanderson
baab9ddf02 Included fix for Text(%), though the underlying bug for rending these persists. 2021-01-28 12:01:49 -08:00
Grant Sanderson
c1ebb583c8 Merge pull request #1323 from sahilmakhijani/shaders
Interactive Mobjects in Manim
2021-01-28 11:59:12 -08:00
Grant Sanderson
696e952a3a Merge pull request #1320 from TonyCrane/shaders
Add documentation for shaders version
2021-01-28 11:53:03 -08:00
Sahil Makhijani
a3754fa606 Interactive Mobjects added 2021-01-28 14:02:43 +05:30
Tony031218
5de62edfb8 update workflow 2021-01-27 10:45:06 +08:00
Tony031218
c39d208ff0 update workflow 2021-01-26 23:13:22 +08:00
Tony031218
a47b7c6bae add icon 2021-01-26 23:06:29 +08:00
Tony031218
4aa6be6e55 add pycairo to env 2021-01-26 22:57:32 +08:00
Tony031218
f900669bc4 fix bugs and update README 2021-01-26 22:56:54 +08:00
Tony031218
06ba7031c7 finish example scenes 2021-01-26 20:52:17 +08:00
Tony031218
2fd4d7a2c4 finish config, structure, constants and custom_default 2021-01-26 14:57:05 +08:00
Tony031218
cd79151c10 finished Quick Start 2021-01-25 19:53:44 +08:00
Tony031218
a7697095d6 finish development category and improve style 2021-01-25 10:20:41 +08:00
Tony031218
42c59f80c8 create manim_example_ext 2021-01-24 23:22:11 +08:00
Tony031218
c68bf1c8f7 change theme 2021-01-24 19:44:48 +08:00
Tony031218
ddcfd01fa3 add manimlib to path 2021-01-24 16:03:18 +08:00
Tony031218
bb62ff4cd6 set up structure 2021-01-24 14:51:06 +08:00
鹤翔万里
c0852eae88 Fix Action Workflow (#5) 2021-01-24 14:06:44 +08:00
Tony031218
4494d80a4c fix path for sphinx-build 2021-01-24 11:44:39 +08:00
Tony031218
14cbfc0423 update structure 2021-01-24 11:33:49 +08:00
Tony031218
539f3b095a set up Action workflow to build up docs 2021-01-24 11:31:46 +08:00
Tony031218
5dbc7d807f set up docs 2021-01-24 09:49:29 +08:00
Grant Sanderson
d04d451c6a Allow alignment/interpolation/etc. between mobjects with different data keys 2021-01-23 16:19:16 -08:00
Grant Sanderson
a58772db87 Fix writing to gifs 2021-01-23 16:08:39 -08:00
Grant Sanderson
0ac155d150 Making writing to partial movies optional, and set the default to be False. 2021-01-23 11:02:22 -08:00
Grant Sanderson
090743aacb Fix how sound files are found 2021-01-23 11:02:02 -08:00
鹤翔万里
9bd4f6714f Merge pull request #4 from 3b1b/shaders
Update
2021-01-22 19:34:49 +08:00
Grant Sanderson
e4f888fbc4 Improved scrolling 2021-01-19 14:12:25 -08:00
Grant Sanderson
e08784400a Reduce the need to type 'self.' so much when embedding into a scene. 2021-01-19 13:52:57 -08:00
Grant Sanderson
20b787223b Rename get_position -> find_initial_position 2021-01-19 11:36:28 -08:00
Grant Sanderson
9a502cd83b Move window position logic into window 2021-01-19 11:35:25 -08:00
Grant Sanderson
78ac18496d Fix CameraFrame interpolation 2021-01-18 16:44:04 -08:00
Grant Sanderson
59af903f14 Reorganize the interaction between CameraFrame and shader perspective transforms, along with some keyboard interactions for panning 2021-01-18 16:39:29 -08:00
Grant Sanderson
e218105f73 Merge custom defaults recursively rather than overriding manim's with the local one 2021-01-18 10:58:33 -08:00
Grant Sanderson
f91c81dd6a Rename TexMobject -> Tex and TextMobject -> TexText 2021-01-18 08:20:14 -10:00
Grant Sanderson
3bd56bff07 Replace TextMobject with Text in opening example 2021-01-18 08:13:41 -10:00
Grant Sanderson
68a8114d7a Remove unused Rectangle import 2021-01-18 08:13:18 -10:00
Grant Sanderson
9c524fe3a7 Be sure Mobject.set_points and Mobject.set_data returns self 2021-01-18 08:06:33 -10:00
Grant Sanderson
b3c8940a18 Bug fix to Mobject.align_family and Mobject.add_n_more_submobjects 2021-01-18 08:06:12 -10:00
Grant Sanderson
1b1b138860 Merging #1316 2021-01-17 17:24:08 -10:00
Grant Sanderson
19e93454d9 Merge pull request #1316 from TonyCrane/shaders
Improve Text's handling of non-display characters in shaders and Add a feature
2021-01-17 19:22:11 -08:00
Grant Sanderson
86bfa4c39c Improvements to DotCloud 2021-01-17 13:40:52 -10:00
Tony031218
cfa8577454 add PyOpenGL packages in requirements.txt and environment.yml 2021-01-16 11:22:34 +08:00
Tony031218
b7bd40a6f6 make window_position changeable 2021-01-16 10:46:30 +08:00
Tony031218
453ccc2765 remove unnecessary comment 2021-01-16 10:23:11 +08:00
Tony031218
f6b5edede2 reduce annoying errors 2021-01-16 10:21:42 +08:00
Tony031218
3d118a5bb6 change the method of reset submobjects 2021-01-16 10:20:41 +08:00
Tony031218
314c847463 remove unused NOT_SETTING_FONT_MSG 2021-01-16 09:40:05 +08:00
Tony031218
7f27e926f2 replace single quotes with double quotes 2021-01-16 09:37:54 +08:00
Tony031218
5f6b653803 improve Text's handling of non-display characters 2021-01-16 09:35:13 +08:00
鹤翔万里
83a9217063 Merge pull request #3 from 3b1b/shaders
Update
2021-01-16 08:46:48 +08:00
Grant Sanderson
2daf62ecea Add notes to SurfaceExample 2021-01-15 11:11:07 -10:00
Grant Sanderson
c698c6ea44 Fix Point.set_location 2021-01-15 11:10:57 -10:00
Grant Sanderson
4e4a7b9886 Have background rectangle match background color by default 2021-01-15 10:20:50 -10:00
Grant Sanderson
b423a423b5 Make customization more accessible 2021-01-15 10:16:37 -10:00
Grant Sanderson
d37de184d2 Set gamma properly 2021-01-15 09:27:51 -10:00
Grant Sanderson
bec3ba70eb Merge pull request #1315 from Tony031218/shaders
Fix some bugs of the shaders branch
2021-01-15 11:13:33 -08:00
Grant Sanderson
08e22cf859 Bug fix to apply_points_function 2021-01-15 09:02:07 -10:00
Grant Sanderson
1f3b058aa9 Simplify Point.set_location 2021-01-15 08:55:40 -10:00
Grant Sanderson
d4c89e520f Reorganize methods and how triangulation gets refreshed 2021-01-15 08:55:19 -10:00
Tony031218
7c04edcced improve Text's size 2021-01-15 23:39:24 +08:00
Tony031218
97ecfcda9b remove media_dir.txt in scene/ 2021-01-15 22:57:22 +08:00
Tony031218
c6fcaa93bb remove stream_starter 2021-01-15 22:49:11 +08:00
Tony031218
fa3cad18e0 update requirements.txt and environment.yml 2021-01-15 21:47:19 +08:00
Tony031218
f696ba4100 add an example for Text 2021-01-15 21:11:17 +08:00
Tony031218
1d1706039e remove an unnecessary import 2021-01-15 20:25:17 +08:00
Tony031218
78848b971c fix a wrong usage of logging.log 2021-01-15 20:21:17 +08:00
Tony031218
79b8136330 fix Text in shaders 2021-01-15 20:21:17 +08:00
Grant Sanderson
f314054081 Small cleanup/reorganizing of Mobject methods 2021-01-14 15:07:35 -10:00
Grant Sanderson
7b67f4556b Reorganize Mobject methods and remove ones that are not longer needed 2021-01-14 14:15:58 -10:00
Grant Sanderson
8f6b006cc8 Speeds up Mobject.get_center and Mobject.get_corner 2021-01-14 09:31:41 -10:00
Grant Sanderson
281b38b860 Small fixes to make sure storing the bounding box works 2021-01-14 01:38:40 -10:00
Grant Sanderson
f90e4147b6 Save bounding box information, which speeds up most mobject manipulations 2021-01-14 01:01:43 -10:00
Grant Sanderson
d53dbba346 Always call super for init_data 2021-01-14 01:01:13 -10:00
Grant Sanderson
098b939ec0 Specify default about_edge for Rotate 2021-01-14 01:00:53 -10:00
Grant Sanderson
8b83c5e27d Performance improvement for Write 2021-01-13 11:55:45 -10:00
Grant Sanderson
2c27511556 Remove null_point_align 2021-01-13 11:55:26 -10:00
Grant Sanderson
9f5f682351 Factor out get_num_string 2021-01-13 11:11:25 -10:00
Grant Sanderson
39cdae0983 Match uniforms in Mobject.become 2021-01-13 10:23:42 -10:00
Grant Sanderson
b40a3b5710 Buf fix with Arrow 2021-01-13 09:28:52 -10:00
Grant Sanderson
38b305bb19 Fix issue with pointwise_become_partial 2021-01-13 09:21:22 -10:00
Grant Sanderson
8cc484943e Remove note 2021-01-13 09:21:00 -10:00
Grant Sanderson
d29cfd842f Iterations and indexing into mobject should only look at submobjects, none of this sometimes self is included and sometimes it isn't business 2021-01-13 09:20:47 -10:00
Grant Sanderson
2e3a112ff8 Treat Matrix.mob_matrix as list rather than numpy matrix, since it sometimes interprets mobjects as sequences 2021-01-13 09:20:11 -10:00
Grant Sanderson
d65a915e7b Initialize colors properly with new TexMobject structure 2021-01-13 08:18:24 -10:00
Grant Sanderson
5f69899e65 Fix bug where all members of a family pointed to the same rgba array 2021-01-13 08:17:43 -10:00
Grant Sanderson
5e09a80c5b Bug fix, call super().finish() 2021-01-13 00:35:57 -10:00
Grant Sanderson
f61dfe7948 Tiny change 2021-01-13 00:35:39 -10:00
Grant Sanderson
bf3571c103 Have DecimalMobject look to the same cache that TexMobjects do 2021-01-13 00:24:40 -10:00
Grant Sanderson
20593d8fa8 Change how DecimalNumber.set_value works so that it's not creating new instances each time 2021-01-13 00:12:08 -10:00
Grant Sanderson
6537258f24 Cache already computed TexMobjects 2021-01-13 00:11:27 -10:00
Grant Sanderson
fda7fff146 Allow caching of shader program code 2021-01-13 00:10:17 -10:00
Grant Sanderson
00333d0a4d Bug fix 2021-01-13 00:09:56 -10:00
Grant Sanderson
ad60b903d0 Allow configuration of VMobjectFromSVGPathstring from SVGMobject 2021-01-13 00:09:36 -10:00
Grant Sanderson
091cd355d4 Clean up trash from ChangingDecimal 2021-01-13 00:09:10 -10:00
Grant Sanderson
dd2a459eaa Refresh shader data before aligning new data 2021-01-13 00:08:40 -10:00
Grant Sanderson
c5aa330077 Small bug fix to Write 2021-01-13 00:07:58 -10:00
Grant Sanderson
bbe79e0026 Tiny comment 2021-01-12 16:08:35 -10:00
Grant Sanderson
7af100489b Include font_size in data 2021-01-12 13:08:24 -10:00
Grant Sanderson
f1c32b64cc Default to apply animations over family rather than family_members_with_points 2021-01-12 13:08:01 -10:00
Grant Sanderson
cc094dd479 Remove ZoomedScene 2021-01-12 12:35:45 -10:00
Grant Sanderson
ab0d5c58d4 Remove ZoomedScene 2021-01-12 12:35:16 -10:00
Grant Sanderson
4abf93e2aa Remove MovingCameraScene 2021-01-12 12:33:59 -10:00
Grant Sanderson
7c8162a6f7 Delete deprecated camera classes 2021-01-12 12:26:08 -10:00
Grant Sanderson
c4f190cfc4 Replace .points with ._points 2021-01-12 12:25:12 -10:00
Grant Sanderson
d60ec48591 Track/interpolate uniforms the same way data is 2021-01-12 12:15:32 -10:00
Grant Sanderson
ba8fb4a6b7 check_data_alignment by default 2021-01-12 11:21:57 -10:00
Grant Sanderson
ca1c2f7797 Return unit normal as 1d vector 2021-01-12 11:13:41 -10:00
Grant Sanderson
0d238417cb Allow locking data to speed up some animations 2021-01-12 11:09:53 -10:00
Grant Sanderson
ddfc3a6567 Replace lingering .points references 2021-01-12 07:27:32 -10:00
Grant Sanderson
6b29691e0e Allow setting of multiple colors/opacities/stroke_widths 2021-01-11 17:52:48 -10:00
Grant Sanderson
6b451dcc22 Allow Mobject.get_family(recurse) for common recursive methods 2021-01-11 17:03:12 -10:00
Grant Sanderson
4d9498322e Push more color functionality to Mobject 2021-01-11 16:37:51 -10:00
Grant Sanderson
d1b888958b Save triangulation along with points 2021-01-11 16:37:01 -10:00
Grant Sanderson
d6a00bc32d Don't call np.resize when length shouldn't change 2021-01-11 16:36:42 -10:00
Grant Sanderson
c408adeefa Rework DotCloud and PMobject for new data structure 2021-01-11 12:40:21 -10:00
Grant Sanderson
a5dd08cca7 Whoops, this shouldn't be here 2021-01-11 12:39:55 -10:00
Grant Sanderson
30dc8176ff Remove append_points from VMobject, as it's now up in Mobject 2021-01-11 12:39:45 -10:00
Grant Sanderson
96fbac85ad Setup Image/Surface for new data formatting 2021-01-11 12:39:14 -10:00
Grant Sanderson
9314dfd933 Reframe Mobject, VMobject and SurfaceMobject with a data map 2021-01-11 10:57:23 -10:00
Grant Sanderson
b3335c65fb Partial progress 2021-01-10 18:51:47 -08:00
Grant Sanderson
fb0de62ef4 Slight change to colormap 2021-01-10 14:12:15 -08:00
Grant Sanderson
bf73938fd1 Move joint type map to constants 2021-01-10 14:10:31 -08:00
Grant Sanderson
8d14b66583 Fix previous commit 2021-01-10 08:38:47 -08:00
Grant Sanderson
92b0953081 Move around where colormap code lives 2021-01-10 08:35:06 -08:00
Grant Sanderson
e98ebfe9e1 Rename add_light -> finalize_color and leave room for other color manipulations 2021-01-09 22:11:38 -08:00
Grant Sanderson
889acea380 Use matplotlib colormaps 2021-01-09 22:10:40 -08:00
Grant Sanderson
0b41457d4e Remove COLORMAPS 2021-01-09 22:09:02 -08:00
Grant Sanderson
fdcc8d4257 Add ability to manipulate a mobjects shader code from python, and in particular to give it a coloring function, e.g. with Mobject.set_color_by_xyz_func 2021-01-09 18:52:54 -08:00
Grant Sanderson
a7af5e72c6 Added Mobject.get_grid 2021-01-09 10:48:45 -08:00
Grant Sanderson
677d609870 Tiny chantges 2021-01-09 10:30:42 -08:00
Grant Sanderson
a429a146c7 Fix how stroke is scaled for perspective 2021-01-09 10:30:11 -08:00
Grant Sanderson
ac4755459a Clamp perspective_scale_factor 2021-01-09 10:29:45 -08:00
Grant Sanderson
ff37b589ff Remove import 2021-01-09 10:26:20 -08:00
Grant Sanderson
81e359d22e Tie focal distance to camera fram height 2021-01-09 10:25:59 -08:00
Grant Sanderson
632c35daef Fix bugs in stroke shader for 3d scenes 2021-01-08 22:28:34 -08:00
Grant Sanderson
f47f848236 Change default focal distance as positioning function changes 2021-01-08 22:28:13 -08:00
Grant Sanderson
cb87912203 Remove import 2021-01-08 22:27:15 -08:00
Grant Sanderson
9a1e103a7f Introduce flat_stroke uniform 2021-01-08 22:26:47 -08:00
Grant Sanderson
8c7e93f829 Change to pan by scrolling 2021-01-08 22:26:14 -08:00
Grant Sanderson
488387f1de Add to OpeningManimExample 2021-01-07 16:38:08 -08:00
Grant Sanderson
7db1f7786a Remove unused import 2021-01-07 16:37:35 -08:00
Grant Sanderson
067f25d4b8 Make it so you can pass in x_range and y_range to NumberPlane 2021-01-07 16:37:23 -08:00
Grant Sanderson
42a3c56898 Limit how much is shown in display_during_execution 2021-01-07 16:37:01 -08:00
Grant Sanderson
7b8677fd6c Push all mention of the #INSERT convention to a note in the insert file 2021-01-07 16:16:20 -08:00
Grant Sanderson
5eee39803f Rename get_tex_string -> get_tex 2021-01-07 12:14:51 -08:00
Grant Sanderson
6259d1c897 Update TexTransformExample 2021-01-07 12:11:58 -08:00
Grant Sanderson
60c03831fb Simplify split_string_to_isolate_substrings, even though it's currently not used anywhere 2021-01-07 12:11:44 -08:00
Grant Sanderson
9122aa2419 Cleaned up TexMobject.break_up_tex_strings 2021-01-07 12:07:27 -08:00
Grant Sanderson
007680a183 Rename substrings_to_isolate to simply isolate, and fix a bug associated with rendering sqrt{ 2021-01-07 11:50:15 -08:00
Grant Sanderson
c2b5595fae If replacing a null mobject, just scale by 0 2021-01-07 11:49:03 -08:00
Grant Sanderson
5939f24cd4 Added key_map option and made key methods static 2021-01-07 11:48:16 -08:00
Grant Sanderson
cfe61a35af Remove old 3d scene material and at stubs for potential new methods 2021-01-07 10:45:28 -08:00
Grant Sanderson
c1298bdffd Add some more explanation to TexTransformExample 2021-01-06 16:14:55 -08:00
Grant Sanderson
e187728f0c Add transform_mismatches option 2021-01-06 16:14:36 -08:00
Grant Sanderson
4a19c48667 strip tex strings so that they're easier to match 2021-01-06 16:14:16 -08:00
Grant Sanderson
63692ed59a Remove unused requirements 2021-01-06 14:24:17 -08:00
Grant Sanderson
4ba5e733fb Change example scene referenced in readme 2021-01-06 14:24:05 -08:00
Grant Sanderson
20f5ba409f A few improvements to mouse interactions 2021-01-06 12:48:58 -08:00
Grant Sanderson
c65a7fb340 Add Window.is_key_pressed method 2021-01-06 12:47:13 -08:00
Grant Sanderson
b13b94938a Remove no-longer-needed hack for pixel_coords_to_space_coords 2021-01-06 12:46:46 -08:00
Grant Sanderson
825d6bdc5c Add higher resolution earth texture 2021-01-06 12:46:16 -08:00
Ben Spitz
2451f024f6 Fix typo in value_tracker.py
"Note meant to be displayed" -> "Not meant to be displayed"
2021-01-06 12:21:49 -08:00
Grant Sanderson
62bb40a7df Change seek_full_path_from_defaults to find_file, and make it a more general function which will find and download urls if needed. This means for images/textures/etc. one can point online 2021-01-06 10:39:34 -08:00
Grant Sanderson
065df65cf1 Reorganize how shader files sit in the shaders folder 2021-01-05 23:14:16 -08:00
Grant Sanderson
6486938c59 Remove media_dir configuration, as that is covered by video_dir 2021-01-05 22:38:25 -08:00
Grant Sanderson
9d7b2873bb Correct resolution description 2021-01-05 22:38:09 -08:00
Grant Sanderson
3c1ab6ce25 Simple cleanup and removal of unused functions 2021-01-05 22:37:28 -08:00
Grant Sanderson
446a69f7c0 Remove import 2021-01-05 22:10:08 -08:00
Grant Sanderson
5b454a3ff7 Remove rotate_in_place and scale_in_place methods, as they had the same functionality as rotate and scale 2021-01-05 22:05:15 -08:00
Grant Sanderson
9ee1a526ed Added new example scenes and cleaned up the couple of old ones 2021-01-05 22:04:49 -08:00
Grant Sanderson
06f0374143 Fix typo bug and change default alignment for text 2021-01-05 22:04:16 -08:00
Grant Sanderson
dde085094f Refresh triangulation after general functions 2021-01-05 22:00:52 -08:00
Grant Sanderson
f07bd23235 Rename apply_points_function_about_point -> apply_points_function 2021-01-05 21:58:43 -08:00
Grant Sanderson
c0b90b398c Add TransformMatchingShapes and TransformMatchingTex 2021-01-05 18:03:06 -08:00
Grant Sanderson
92386f4e20 Cleanup how tex_strings are handled, introducing the ability to simply surround substrings of the input with {{ and }} in order to make sure they are separated 2021-01-05 18:02:32 -08:00
Grant Sanderson
38f9686d68 Ammend FadeInFromPoint and add FadeOutToPoint 2021-01-05 18:01:23 -08:00
Grant Sanderson
349a9c9cea Add VMobject.get_opacity 2021-01-05 18:00:55 -08:00
Grant Sanderson
556ffb192f In add_n_more_submobjects, for the benefit of align_submobjects, make it so that new copies are only ghosted out if there is some transparency at play 2021-01-05 18:00:34 -08:00
Grant Sanderson
bfa36a7659 Discard frag shader outside dot radius 2021-01-05 09:57:18 -08:00
Grant Sanderson
2d709758d0 Added TransformMatchingParts for smarter tex transforms 2021-01-04 23:09:29 -08:00
Grant Sanderson
509f3db371 Change so that lambda is not given a name 2021-01-04 23:09:03 -08:00
Grant Sanderson
bc95013ab4 Only need to align submobjects 2021-01-04 23:08:25 -08:00
Grant Sanderson
8644d71820 Improve defaults for Lines/Arrows pointing between two mobjects 2021-01-04 17:25:05 -08:00
Grant Sanderson
2cdebeda29 Add slice_by_tex method 2021-01-04 16:01:04 -08:00
Grant Sanderson
a6d484236c Add DotCloud to universal imports 2021-01-04 14:55:55 -08:00
Grant Sanderson
131794e53c Change DotCloud initialization 2021-01-04 14:55:42 -08:00
Grant Sanderson
a4ea4791e7 Added DotCloud type 2021-01-04 13:26:58 -08:00
Grant Sanderson
6c0f00b4a1 Reimplement stretch_array_to_length 2021-01-04 13:26:29 -08:00
Grant Sanderson
c87b2e272b Tiny change 2021-01-04 13:26:14 -08:00
Grant Sanderson
31e6aa2ae0 Use super() 2021-01-04 13:25:42 -08:00
Grant Sanderson
369a7fc455 Change it so that reset points is not necessarily called on mobject initialization 2021-01-04 13:25:04 -08:00
Grant Sanderson
e2fc0ab1aa Remove unnecessary import 2021-01-03 17:58:01 -08:00
Grant Sanderson
494f1899fd Make it so that FadeTransform returns moving mobject to its original state 2021-01-03 17:57:43 -08:00
Grant Sanderson
b22f1ab715 Remove reference to FILE_DIR 2021-01-03 17:25:37 -08:00
Grant Sanderson
156ea11537 Fix the but for transforming between VMobjects with different triangulations. Turns out this is all that's needed 2021-01-03 17:17:20 -08:00
Grant Sanderson
baff788217 Tiny line consolidation 2021-01-03 17:16:19 -08:00
Grant Sanderson
e43b8ef4e4 Remove prepare_for_animation 2021-01-03 17:16:08 -08:00
Grant Sanderson
b8b44f062c Added FadeTransform and FadeTransformPieces 2021-01-03 16:53:49 -08:00
Grant Sanderson
504f5c4329 Minor tweak to comment, etc. 2021-01-03 16:53:29 -08:00
Grant Sanderson
a4b8a8d88c Get rid of old fading classes 2021-01-03 14:39:45 -08:00
Grant Sanderson
afebc29440 Remove container 2021-01-03 12:29:05 -08:00
Grant Sanderson
148afc29aa Change default number of samples for 3d camera 2021-01-03 12:04:05 -08:00
Grant Sanderson
572383f541 Have buff between Decimal digits change with font size 2021-01-03 12:03:39 -08:00
Grant Sanderson
c2b16d768e Have decimal remember and match font size, not height 2021-01-03 11:44:53 -08:00
Grant Sanderson
e5c79cbb90 Directly cache svg file instead of tex, and don't store superfluous files associated with tex rendering 2021-01-03 11:29:09 -08:00
Grant Sanderson
16ea2fd9c1 include utils.directories in universal import list 2021-01-03 11:28:20 -08:00
Grant Sanderson
5541d55094 Remove camera quality information from constants 2021-01-02 23:02:39 -08:00
Grant Sanderson
05887d5039 Remove reference to UHD_CAMERA_QUALITY 2021-01-02 23:02:20 -08:00
Grant Sanderson
d1c6b80622 Tiny change 2021-01-02 23:02:02 -08:00
Grant Sanderson
3b26a6c260 Clean up colors, e.g. replacing LIGHT_GREY and DARK_GREY with GREY_B and GREY_D 2021-01-02 22:44:53 -08:00
Grant Sanderson
32b76bf448 Small move to DEFAULT_PIXEL_HEIGHT, etc. In theory these values shouldn't matter anymore, but it's nice to have some default there for the definition of Camera 2021-01-02 22:38:07 -08:00
Grant Sanderson
6da1836f02 Take scene finding messages out of constants 2021-01-02 22:26:49 -08:00
Grant Sanderson
e01496e8bd Rearrange how passing in no module or scenes is handled 2021-01-02 22:20:13 -08:00
Grant Sanderson
93fe783b80 Make it so that simply typing 'python -m manim' will embed you in a blank scene to work with 2021-01-02 22:03:00 -08:00
Grant Sanderson
7b3f4d08f5 Replace the progress bar with a simple display of what's being written which then gets deleted 2021-01-02 21:32:48 -08:00
Grant Sanderson
d2518df82c Add deprication warning 2021-01-02 21:32:07 -08:00
Grant Sanderson
f11ab03112 Remove unnecessary imports 2021-01-02 21:31:56 -08:00
Grant Sanderson
d4207540bb Removed files 2021-01-02 21:31:00 -08:00
Grant Sanderson
592432611b Remove all configuration from constants.py, and clean up the many files affected by this move 2021-01-02 20:47:51 -08:00
Grant Sanderson
cf01a215db Stop treating extract_scene like a script 2021-01-02 19:03:01 -08:00
Grant Sanderson
ba46164b49 Remove image showing methods from mobject 2021-01-02 19:02:22 -08:00
Grant Sanderson
525309f277 Small update to example_scenes.py description 2021-01-02 11:13:14 -08:00
Grant Sanderson
343253b787 Remove livestream related arguments 2021-01-02 11:12:43 -08:00
Grant Sanderson
123450c3f2 Merge pull request #1301 from Tony031218/shaders
Some cleanups and bug fixes for the shaders branch
2021-01-02 09:43:10 -08:00
Grant Sanderson
5424716877 Merge branch 'shaders' into shaders 2021-01-02 09:42:57 -08:00
Grant Sanderson
2a61360786 Merge license 2021-01-02 09:38:58 -08:00
Grant Sanderson
471eb8b0d9 Added .gitignore from https://www.toptal.com/developers/gitignore/ 2021-01-02 09:37:28 -08:00
Tony031218
d221073360 update README.md 2021-01-02 19:20:25 +08:00
Tony031218
8b2785fdc9 fix bugs in extract_scene.py 2021-01-02 19:17:11 +08:00
Tony031218
d28f30dc4a fix bugs of window position on Windows 2021-01-02 19:16:35 +08:00
Tony031218
23af9c6c9c fix bugs on Windows and ctex 2021-01-02 19:15:30 +08:00
Tony031218
38b293c204 remove versions from requirements.txt and update environment.yml 2021-01-02 19:14:00 +08:00
Tony031218
b54e9efccf delete docs/ travis and docker 2021-01-02 19:12:54 +08:00
Grant Sanderson
e3acb920f4 Remove MoveCar 2021-01-01 21:11:17 -08:00
Grant Sanderson
915b7ea3ad Removed some drawings specific to 3b1b videos 2021-01-01 20:20:48 -08:00
Grant Sanderson
23f7bce427 Bug fix to add_smooth_curve_to 2021-01-01 20:12:34 -08:00
Grant Sanderson
5a238f1551 Removed Logo from drawings 2021-01-01 20:12:02 -08:00
Grant Sanderson
3821dd358a Added sympy to requirements 2021-01-01 20:11:30 -08:00
Grant Sanderson
68e47c839b Added sympy to the list of default imports 2021-01-01 20:11:19 -08:00
Grant Sanderson
e59d839806 Update LICENSE.md 2020-12-31 13:49:32 -08:00
Grant Sanderson
e737ace268 Updated README and LICENSE after moving 3b1b content to another project 2020-12-31 13:47:50 -08:00
Grant Sanderson
3a1f07492c Moved 3b1b specific content out of this project 2020-12-31 13:04:13 -08:00
Grant Sanderson
58dbec76da Changed monster thumbnail 2020-12-29 16:45:32 -08:00
Grant Sanderson
c3643cf4e3 Some finishing tweaks to the med_test video 2020-12-24 16:26:03 -08:00
Grant Sanderson
917ff685bd Update Monster thumbnail 2020-12-24 16:24:49 -08:00
Grant Sanderson
1d5cee6f43 Make the manim window show up in the upper right quadrant of the monitor window 2020-12-24 16:24:06 -08:00
Grant Sanderson
27cd86fde7 Final animations for first med_test video 2020-12-21 14:29:45 -08:00
Grant Sanderson
cc73075d63 More med_test animations 2020-12-18 21:02:36 -08:00
Grant Sanderson
607e918ab1 More med test animations, doing a rewrite 2020-12-17 15:59:29 -08:00
Grant Sanderson
1237ecc8f0 More percent sign exceptions 2020-12-17 15:59:14 -08:00
Grant Sanderson
df6ea06f89 Have DecimalNumber take in a font size 2020-12-17 15:59:02 -08:00
Grant Sanderson
2461248ef6 Allow Line to take in 2d arrays as arguments 2020-12-08 09:27:20 -08:00
Grant Sanderson
9dc4551685 discrete fourier transform animation 2020-12-08 09:26:45 -08:00
Grant Sanderson
d650cfd3e7 DFT animation 2020-12-04 14:42:54 -08:00
Grant Sanderson
c71eddb9d3 First half medical test animations 2020-12-04 08:26:12 -08:00
Grant Sanderson
6f81ec383c Name sub 2020-12-04 08:25:44 -08:00
Grant Sanderson
af0948ea15 Address percent bug a better way, but still witha patch that shouldn't be permanent 2020-12-04 08:25:23 -08:00
Grant Sanderson
d702396d87 Rename what was an overloaded term 'width' on Arrow to thickness 2020-12-04 08:20:59 -08:00
Grant Sanderson
b2f09dbdb1 Account for new Fade behavior 2020-12-04 08:20:32 -08:00
Grant Sanderson
bbfce0f5be Change window position defaults 2020-12-04 08:20:06 -08:00
Grant Sanderson
c65dfb85d2 Change arguments for Fading so that you can pass in shift and/or scale to FadeIn and FadeOut, aimed at increased readibility and flexibility 2020-12-04 08:14:15 -08:00
Grant Sanderson
b64875fd55 Typo fix for primitive 2020-12-04 08:12:53 -08:00
Grant Sanderson
6ead1ceca6 Updated requirements 2020-12-04 08:09:29 -08:00
Grant Sanderson
f08003fcb2 Typo fix for primitive 2020-12-04 08:09:02 -08:00
Grant Sanderson
102af22182 Typo fix for primitive 2020-12-04 08:08:38 -08:00
鹤翔万里
f934bdc61e Merge pull request #1284 from niedong/typo-fix
fix typo docstring in scene_file_writer.py
2020-11-29 19:23:47 +08:00
niedong
ba405521ce fix typo docstring in scene_file_writer.py 2020-11-29 11:51:20 +08:00
Grant Sanderson
171042b8d7 Animations for some 18S191 lectures 2020-11-24 13:31:50 -08:00
Grant Sanderson
25bab8c10e Final edits to hamming video 2020-11-24 13:31:32 -08:00
Grant Sanderson
da972edfca Change when camera shift happens 2020-11-24 13:31:21 -08:00
Grant Sanderson
32c5534099 Change banner defaults 2020-11-24 13:30:37 -08:00
Grant Sanderson
1f36e83c9d Delete defunct functionality 2020-11-24 13:29:44 -08:00
Grant Sanderson
4e54c6de54 Fix rgb_to_hex bug 2020-11-24 13:29:27 -08:00
Grant Sanderson
3bc4416655 Updated requirements 2020-11-24 13:29:04 -08:00
鹤翔万里
0dc8e4389d Merge pull request #1268 from niedong/ci-fix
Change Ubuntu version to bionic in .travis.yml
2020-11-14 10:53:25 +08:00
niedong
34ec0f4795 Change Ubuntu version to bionic in .travis.yml
Remove redundant pycairo version
2020-11-09 23:09:38 +08:00
鹤翔万里
faa52d7dd4 Merge pull request #1264 from niedong/fix-ci
Specify pycairo version to 1.19.1
2020-11-08 13:49:35 +08:00
niedong
d797e5f1fe Specify pycairo version to 1.19.1 2020-11-04 18:38:10 +08:00
鹤翔万里
99952067c1 Merge pull request #1260 from Abdul1337/master
Fixed a typo in exapmle_scenes.py
2020-10-21 22:42:20 +08:00
Abdul Aziz
30ae89464e Fixed a typo in exapmle_scenes.py 2020-10-20 18:24:16 +05:30
鹤翔万里
1ecbbbbcd5 Merge pull request #1251 from italosestilon/master
fix iteration through a dictionary
2020-10-10 10:45:52 +08:00
鹤翔万里
186b86cb70 Merge pull request #1250 from amogh7joshi/patch-2
Fix typo in scene.py
2020-10-08 23:09:37 +08:00
Italos Estilon de Souza
4c42083ffc fix iteration through a dictionary 2020-10-07 11:52:05 -03:00
Amogh Joshi
dec753fc26 Update scene.py 2020-10-05 17:49:40 -04:00
鹤翔万里
08c90c272b Merge pull request #1216 from BERENGENITA/patch-1
Fixed typo in comment imports.py
2020-10-02 14:03:07 +08:00
Tony031218
be8b28dd9d update README.md 2020-10-01 10:32:01 +08:00
Tony031218
d0dc7ed301 remove an unnecessary file 2020-10-01 10:12:03 +08:00
鹤翔万里
abc24f2d52 Merge pull request #1147 from MeatBoyed/master
Pygments added to environment.yml
2020-09-30 23:33:08 +08:00
鹤翔万里
53756ea140 Merge pull request #1112 from vivek3141/patch-1
Add dot_color to BulletedList
2020-09-30 23:27:29 +08:00
鹤翔万里
dcb608f258 Merge pull request #1072 from Tony031218/change-coord-color
Allow Axes to change the color of coordinate labels
2020-09-30 23:26:59 +08:00
鹤翔万里
05acf31e47 Merge pull request #1064 from Erik-White/numberline
Correctly return get_unit_size
2020-09-30 23:21:56 +08:00
鹤翔万里
bc5c3968d9 Merge pull request #1043 from kuk0/get_merged_array
remove superfluous code
2020-09-30 23:21:05 +08:00
鹤翔万里
11c451c2e9 Merge pull request #1038 from peninha/patch-1
Corrected a bug in stretch_to_fit_depth function
2020-09-30 23:19:26 +08:00
鹤翔万里
52c5e32ba5 Merge pull request #975 from HappyFacade/patch-1
Update readme to reflect #571
2020-09-30 23:13:16 +08:00
dummy26
37efc93e9c Fix a typo in mobject.py (#847) 2020-09-30 23:03:57 +08:00
鹤翔万里
d63f61b903 Merge pull request #909 from Solara570/numberplane-fix
Small fix to NumberPlane construction
2020-09-30 23:01:49 +08:00
鹤翔万里
49d53d9a8f Merge pull request #836 from mavaras/master
#806 typo in WriteStuff
2020-09-30 22:57:30 +08:00
chaoxiaosu
79bf87754a A solution to 'Latex error converting to dvi' problem (#689) 2020-09-30 22:48:29 +08:00
鹤翔万里
e336cf5ddc Merge pull request #1217 from dor2727/patch-tobytes
fixed deprecation warning: tostring -> tobytes
2020-09-30 22:28:28 +08:00
鹤翔万里
e9638aee2e Merge pull request #1187 from Tony031218/master
A solution to xelatex error converting to xdv
2020-09-30 20:54:47 +08:00
Grant Sanderson
169e99b69e Thumbnail change 2020-09-02 09:53:28 -07:00
Grant Sanderson
34b4d90b11 End of Hamming project 2020-08-30 16:01:32 -07:00
Grant Sanderson
f89676d53f Allow arrange_in_grid to specify v_buff and h_buff 2020-08-30 16:01:22 -07:00
Grant Sanderson
821857afa8 Fixed braces on Matrix 2020-08-30 16:00:59 -07:00
Grant Sanderson
35a2ade954 Added final_alpha_value parameter to Animation for things like FadeOut 2020-08-30 16:00:42 -07:00
Dor Harpaz
a42d9c6ecb fixed deprecation warning: tostring -> tobytes 2020-08-27 14:03:43 +03:00
BERENGENITA
9f945d9940 Fixed typo in comment imports.py
I have fixed a very simple typo and would like to commit it.
2020-08-27 12:17:43 +02:00
Grant Sanderson
852e840523 End of monster video 2020-08-20 17:16:55 -07:00
Grant Sanderson
054b828396 Clean up TeacherStudentScene.teacher_holds_up 2020-08-20 17:16:47 -07:00
Grant Sanderson
2dac041006 Change default smoothing algorithm 2020-08-20 17:16:15 -07:00
Grant Sanderson
2708ecfd47 Fix Arrow.get_start 2020-08-20 17:13:24 -07:00
Grant Sanderson
9084ddbd06 Should not pollute repo with my ignores 2020-08-20 17:12:56 -07:00
Grant Sanderson
fc153bb49a First half of monster video 2020-08-16 09:46:49 -07:00
Grant Sanderson
537a2c74aa Return self on unlock_triangulation 2020-08-16 09:46:33 -07:00
Grant Sanderson
dd6e99ab2e Make it possible to set a prefered direction for ShowCreation on surfaces 2020-08-16 09:46:08 -07:00
Grant Sanderson
26834178e7 Bug fix to Bubble 2020-08-16 09:45:48 -07:00
Grant Sanderson
fd17e42c23 Add about_point arg to Line.set_angle 2020-08-16 09:45:34 -07:00
Grant Sanderson
c1143c875d Don't show bottom most number on axes 2020-08-16 09:45:13 -07:00
Grant Sanderson
a822c93019 Add added_anims arg to PiCreatureScene.look_at 2020-08-16 09:44:54 -07:00
Grant Sanderson
caca6d0c0e Fix Eyes 2020-08-16 09:44:28 -07:00
Grant Sanderson
c1a1b0f145 Hamming code video scenes 2020-08-12 13:24:40 -07:00
Grant Sanderson
33d4dd7729 Fix svg polygon command 2020-08-12 13:24:16 -07:00
Grant Sanderson
0c37d91af3 This is just a temporary hack, but percent signs don't behave well atm 2020-08-12 13:23:54 -07:00
Grant Sanderson
ae590e7fde Add point_to_rgb 2020-08-12 13:23:21 -07:00
Grant Sanderson
150b03427d Change default window location 2020-08-12 13:23:04 -07:00
鹤翔万里
7556b99dc0 Update ctex_template.tex 2020-07-28 23:03:59 +08:00
Grant Sanderson
960e4e13eb Updated arrange_in_grid 2020-07-23 11:57:18 -07:00
Grant Sanderson
e7a60c6c85 Updated arrange_in_grid 2020-07-23 11:56:06 -07:00
Grant Sanderson
72472c5836 Refactor in terms of a ShaderWrapper object 2020-07-22 18:21:42 -07:00
Grant Sanderson
ae8e8040d7 New implementation of smooth 2020-07-22 18:19:07 -07:00
Grant Sanderson
5ee4b94ec3 Not great, but adding an alternate implementation of make_smooth in as a comment just because it's unclear what's best right now 2020-07-22 18:18:29 -07:00
Grant Sanderson
93f7671732 Fixes to Arrow 2020-07-22 18:17:08 -07:00
Grant Sanderson
cf0afb0259 New name in name_map (which really should exist not in source code) 2020-07-22 18:16:59 -07:00
Grant Sanderson
dbe33f9382 Change axis defaults 2020-07-22 18:16:34 -07:00
Grant Sanderson
f31cf2e30f Changes to Fourier series for name animations 2020-07-22 18:16:09 -07:00
Grant Sanderson
81715adb05 End of chess 2020-07-22 18:15:48 -07:00
Devin Neal
9174ec335c Update README.md 2020-07-18 09:07:34 -07:00
Sujan Dutta
25f672cc55 Update imports.py
corrected the linking word.
2020-07-17 10:47:55 +05:30
Grant Sanderson
9a44794dc9 Removes default color for polygon 2020-06-29 22:53:44 -07:00
Grant Sanderson
46b52a1bbc Small fix to VMobject.pointwise_become_partial for cases when points array sizes dont' match 2020-06-29 22:53:23 -07:00
Grant Sanderson
5e7913fdd4 Implemented pointwise_become_partial for parametric surfaces 2020-06-29 22:52:27 -07:00
Grant Sanderson
61424dbfec Factor out get_render_group_list 2020-06-29 18:25:56 -07:00
Grant Sanderson
2671817ae9 Refactor away from treating shader_info as a dictionary, and make it a proper type as ShaderWrapper. This also includes some cleanup in hos Camera renders 2020-06-29 18:17:18 -07:00
Grant Sanderson
165bf2fe6e Small bug fix 2020-06-29 18:15:54 -07:00
Grant Sanderson
feb6a33135 Account for fixed_in_frame in set_value 2020-06-29 18:15:40 -07:00
Grant Sanderson
cd371dc207 Add Mobject.has_updaters which is distinct from Mobject.suspend_updating 2020-06-29 11:23:01 -07:00
Grant Sanderson
2b3bd2bfce Use an index buffer for shaders to save memory 2020-06-29 11:05:09 -07:00
Grant Sanderson
978137b143 Use super() 2020-06-29 11:04:48 -07:00
Grant Sanderson
f11cb5a498 Small cleanups to arrow 2020-06-29 11:04:23 -07:00
Grant Sanderson
0b58572f41 Removes magic number 2020-06-28 12:15:55 -07:00
Grant Sanderson
439e83f40e set_array_by_interpolation 2020-06-28 12:15:01 -07:00
Grant Sanderson
279f66ceaf A little refactoring and performance improvement 2020-06-28 12:14:46 -07:00
Grant Sanderson
8af879236e Make gloss and shadow uniforms 2020-06-28 12:13:25 -07:00
Grant Sanderson
1cab58ac49 Change how arrow is implemented to be all fill no stroke 2020-06-28 10:05:49 -07:00
Grant Sanderson
41fd6d4f4b Simply reorders where some methods are defined 2020-06-28 10:05:27 -07:00
Grant Sanderson
13bcd723cf Adds a small todo 2020-06-28 10:05:00 -07:00
Grant Sanderson
14cac5ce71 Make stroke width array a float 2020-06-28 10:04:40 -07:00
Grant Sanderson
6a735e49b8 Refresh rotation matrix after interpolation 2020-06-27 12:17:53 -07:00
Grant Sanderson
b443c9e764 Fixed bug at a = 1 for partial_bezier 2020-06-27 12:17:41 -07:00
Grant Sanderson
90db32ee55 Have camera_frame remember rotation matrix by default 2020-06-27 12:10:51 -07:00
Grant Sanderson
54bde86c7b Some small performance improvements to VMobject 2020-06-27 12:10:22 -07:00
Grant Sanderson
10c6bfe3ad Add refresh_shader_info_id insetead of having create_shader_info_id called all the time 2020-06-27 00:01:45 -07:00
Grant Sanderson
26ce1d86ab Remove unlock_shader_data calls 2020-06-27 00:01:04 -07:00
Grant Sanderson
6ba1eae8f6 Use ctx.vertex_array instead of ctx.simple_vertex_array 2020-06-27 00:00:50 -07:00
Grant Sanderson
60e1c88eb4 Slight tweaks to how shader_info id is found and stored 2020-06-26 23:05:25 -07:00
Grant Sanderson
661b81ab17 By default, don't recursively check for updaters unless there's something to find 2020-06-26 22:16:04 -07:00
Grant Sanderson
5d371bfec9 Fix broken import 2020-06-26 21:53:54 -07:00
Grant Sanderson
4910501ee0 Clean up end scroll 2020-06-26 21:53:39 -07:00
Grant Sanderson
9a2b2ecd9e Small repositioning 2020-06-26 21:53:26 -07:00
Grant Sanderson
9d03f40be2 Keep tex mobject from calling itself twice 2020-06-26 21:53:06 -07:00
Grant Sanderson
9795beba89 Removes locked_shader_data notion 2020-06-26 21:52:50 -07:00
Grant Sanderson
212cdbb4d2 Speed improvements. Camera saves vbo for static mobjects, data in shader_data_info is saved and concatenated in raw form 2020-06-26 19:29:34 -07:00
Grant Sanderson
72bfb0047e Prep for antipode animations 2020-06-26 15:36:51 -07:00
Grant Sanderson
9b9dca7bed Final(?) Chessbaord animations 2020-06-26 15:36:38 -07:00
Grant Sanderson
a05621e857 Changes to end scroll 2020-06-26 15:35:50 -07:00
Grant Sanderson
c2feb6fff1 Add shorted method for setting background stroke 2020-06-26 15:35:37 -07:00
Grant Sanderson
21bf3c3e3a VMobject was not correctly incorporating background stroke on init 2020-06-26 15:31:24 -07:00
Grant Sanderson
6451371a75 Final(?) animations for chessbaord puzzle part 1 2020-06-23 14:26:30 -07:00
Grant Sanderson
5b1ce542d7 Update ending scroll 2020-06-23 14:26:13 -07:00
Grant Sanderson
1f6308577b Only remove null curves for tex mobjects 2020-06-23 14:26:02 -07:00
Grant Sanderson
c8195f72a1 New chessboard scenes 2020-06-22 15:22:41 -07:00
Grant Sanderson
c653610215 Add Checkmark and Exmark 2020-06-22 15:22:29 -07:00
Grant Sanderson
09df42a755 Acutually uses Arrow.preserve_tip_size_when_scaling 2020-06-22 15:22:05 -07:00
Grant Sanderson
687d70e9b6 Changes default int_func on ShowIncreasingSubsets to np.round 2020-06-22 15:21:25 -07:00
Charles
ea929d167f Pygments added to environment.yml 2020-06-22 13:06:21 +02:00
Grant Sanderson
fd1f4313ec Lock shader data during interaction 2020-06-18 16:30:38 -07:00
Grant Sanderson
81f6063736 Change string format style 2020-06-18 16:26:04 -07:00
Grant Sanderson
4fdd655564 changes default Line3D resolution 2020-06-18 16:25:48 -07:00
Grant Sanderson
bb66a7c977 Releases moderngl buffers after use 2020-06-18 16:25:26 -07:00
Grant Sanderson
d4635ab165 Chessbaord scenes up to ShowCube 2020-06-17 17:13:26 -07:00
Grant Sanderson
48801f2892 Don't give arrow tip stroke width by default 2020-06-17 17:13:07 -07:00
Grant Sanderson
0a89a775a2 Clean up some family matters 2020-06-17 17:12:48 -07:00
Grant Sanderson
a0006426cc Fix Line3D 2020-06-17 17:12:23 -07:00
Grant Sanderson
eee4054da8 Cleaup how colors are updated 2020-06-17 17:11:57 -07:00
Grant Sanderson
b16b107f3e Add depth test update when fill and stroke shader info are created 2020-06-17 17:11:31 -07:00
Grant Sanderson
138c48c739 Remove old commented out window timing code 2020-06-17 17:10:56 -07:00
Grant Sanderson
5ce8d08e0f Go back to recomputing shader id 2020-06-17 17:10:35 -07:00
Grant Sanderson
d1f1ed6a1a Adds DiagramOfProgression 2020-06-15 12:03:23 -07:00
Grant Sanderson
8c9ea90d50 Remove triangulation lock after animation 2020-06-15 12:02:59 -07:00
Grant Sanderson
e6f73073fe Remember triangle indices, rather than recomputing each frame 2020-06-15 12:02:24 -07:00
Grant Sanderson
c45fe52a70 Rather than calling get_shader_info a bunch, remember a tempalte 2020-06-15 12:01:54 -07:00
Grant Sanderson
6a458547c3 Bug fix 2020-06-15 12:01:05 -07:00
Grant Sanderson
739667f8a9 Turn on depth test for SurfaceMesh 2020-06-15 12:00:37 -07:00
Grant Sanderson
edec91e1e4 Unfactor internals of batch_by_property for easier readibility, and slight performnace improvement 2020-06-15 12:00:03 -07:00
Grant Sanderson
1e6eef89ec Have shader_info remember its own id 2020-06-15 11:59:24 -07:00
Grant Sanderson
9d772496dd Removes the need to be able to recover shader_info from shader_id 2020-06-14 19:01:04 -07:00
Grant Sanderson
7a152fed1c Some TODO stubs. Honestly, this whole file should probably be deleted 2020-06-14 17:42:59 -07:00
Grant Sanderson
00ad9d7f95 Cleanup to square and rectangle init 2020-06-14 17:42:25 -07:00
Grant Sanderson
222b6d1220 Push depth test decision to the mobject level, as opposed to the camera 2020-06-14 17:41:47 -07:00
Grant Sanderson
145c6a7e78 Remove already commented out alternate pix_fmt 2020-06-13 15:22:44 -07:00
Grant Sanderson
f5b4a86801 Add get_color function 2020-06-13 15:22:11 -07:00
Grant Sanderson
46bcf938ed Stretch to fit should apply to all 3 dimensions 2020-06-13 15:21:47 -07:00
Grant Sanderson
81cedfbfda Cleanup to the __init__ functions on a few geometry objects 2020-06-13 15:21:19 -07:00
Grant Sanderson
61a3bd8102 Small change to make the ctx enable flag a little clearer 2020-06-13 15:20:17 -07:00
Grant Sanderson
9d5282b74f New scene for chessboard video 2020-06-13 15:19:42 -07:00
Grant Sanderson
512c42f4df CoinFlip animation 2020-06-10 07:28:43 -07:00
Grant Sanderson
62e5efe87b SGroups should be considered to have resolution (0, 0) 2020-06-10 07:28:06 -07:00
Grant Sanderson
429d63eebf Add special methods for setting angles 2020-06-09 21:25:00 -07:00
Grant Sanderson
2317a7d982 Torus 2020-06-09 21:24:42 -07:00
Grant Sanderson
8a060dfa3f Add axis_normalized option to quaternion_from_angle_axis 2020-06-09 20:40:36 -07:00
Grant Sanderson
a4d4ae9b47 Don't get rid of null curves each frame, instead do it once for SVG mobjects. 2020-06-09 20:39:32 -07:00
Grant Sanderson
cf8790eefa switched to get_triangle_indices 2020-06-09 20:13:25 -07:00
Grant Sanderson
2208b51f1b Lock triangulation and unit normal by default 2020-06-09 17:59:33 -07:00
Grant Sanderson
5584521fb0 Change default focal distance 2020-06-09 17:59:03 -07:00
Grant Sanderson
7c4874bdad Changed how focal_distance works 2020-06-09 17:12:52 -07:00
Grant Sanderson
3e913b6649 Have make_smooth work directly from the quadratic bezier curves, without going via cubics and doubling the size of the points list 2020-06-09 16:58:16 -07:00
Grant Sanderson
1f129f4a23 Clean up parametric function 2020-06-09 16:57:44 -07:00
Grant Sanderson
c7a50ac7a5 Tried, but failed, to write a better smooth bezier function 2020-06-09 12:38:37 -07:00
Grant Sanderson
940432e320 Remove unneeded import 2020-06-09 12:34:57 -07:00
Grant Sanderson
ee7218745e Fixed FunctionGraph bug 2020-06-09 12:34:43 -07:00
Grant Sanderson
b91284b4aa Small shader fixes 2020-06-09 12:34:00 -07:00
Grant Sanderson
f0a36329b1 Changed get_quadratic_approximation_of_cubic 2020-06-08 20:40:39 -07:00
Grant Sanderson
ccefbc0dea Add is_fixed_in_frame uniform which allows mobjects to not get rotated by the camera 2020-06-08 20:27:07 -07:00
Grant Sanderson
5d34cee014 Move frame resizing to get_gl_Position so that the screen rotation matrix remains det 1 2020-06-08 17:55:41 -07:00
Grant Sanderson
be904774dd Treat joint_type as a uniform 2020-06-08 16:03:08 -07:00
Grant Sanderson
bab809b9a6 Allow for passing shader uniforms from mobjects 2020-06-08 15:57:12 -07:00
Grant Sanderson
39230a805c Better handling of textures, now letting multiple get passed in to a textured surface 2020-06-08 15:06:22 -07:00
Grant Sanderson
596b7c0112 Get rid of unneeded import 2020-06-08 14:09:48 -07:00
Grant Sanderson
97304d9d86 Added multisampling to camera 2020-06-08 14:09:31 -07:00
Grant Sanderson
2d19d76675 Replace all FadeInFrom with simple FadeIn, and likewise for FadeOutFrom -> FadeOut 2020-06-07 12:35:20 -07:00
Grant Sanderson
919f267f7f Create Chessboard and Coin types 2020-06-07 12:26:31 -07:00
Grant Sanderson
7e0566cc12 Honestly, this file should be killed 2020-06-07 12:26:20 -07:00
Grant Sanderson
046caa7632 Bug fixes 2020-06-07 12:24:54 -07:00
Grant Sanderson
4968c7a8a1 Small note 2020-06-07 12:24:31 -07:00
Grant Sanderson
4a3e4df2bd Change cube face order 2020-06-07 12:24:14 -07:00
Grant Sanderson
3a111cf3af Get rid of this color nonsense 2020-06-07 12:23:35 -07:00
Grant Sanderson
58df38f74e Let FadeIn and FadeOut take in directions 2020-06-07 12:23:08 -07:00
Grant Sanderson
a5f16f0c52 Make sure light styling is interpolated properly 2020-06-06 17:01:54 -07:00
Grant Sanderson
ba7a51931d Add shadow, and pull out lighting information to Mobject 2020-06-06 16:55:56 -07:00
Grant Sanderson
b32c2937ae Added SurfaceMesh 2020-06-06 13:23:30 -07:00
Grant Sanderson
017961e892 Changed min_samples 2020-06-06 13:22:48 -07:00
Grant Sanderson
b8a1853692 Change meaning of resolution for surfaces to be the number of posts, not fences 2020-06-06 13:22:23 -07:00
Grant Sanderson
58fe0c79d8 Reconfigured ParametricCurve 2020-06-06 11:43:59 -07:00
Grant Sanderson
7cec2e50d5 Rename: ParametricFunction -> ParametricCurve 2020-06-06 11:03:23 -07:00
Grant Sanderson
7c1f560ae2 Change fallback unit normal to be in negative y-direction 2020-06-06 10:57:07 -07:00
Grant Sanderson
98ac6a06f2 Small cleanup 2020-06-06 10:56:46 -07:00
Grant Sanderson
4385fc75d0 Change TipableVMobject to take in all tip_config at one spot 2020-06-06 10:56:23 -07:00
Grant Sanderson
274ebe7a52 Change stroke shader to effectively project down to a flat plane before drawing, but to remember z information via gl_Position and lighting. 2020-06-06 09:26:18 -07:00
Grant Sanderson
1a5fb207ae Reconfigured how to initialize axes and number planes. Hopefully much more sensible this way 2020-06-05 19:24:35 -07:00
Grant Sanderson
fbe917d461 Add height to DecimalNumber config 2020-06-05 17:57:44 -07:00
Grant Sanderson
5c23e93547 Reconfigure NumberLine, the whole interface felt very weird 2020-06-05 17:57:21 -07:00
Grant Sanderson
cbc5bff1c0 Setup for new project 2020-06-05 16:33:30 -07:00
Grant Sanderson
d89bf9b635 Added SGroups 2020-06-05 13:37:06 -07:00
Grant Sanderson
83b2932e02 A few more surface types 2020-06-05 13:24:26 -07:00
Grant Sanderson
51eb9de9d0 A little cleaning up of 3d axes. More to come 2020-06-05 13:24:14 -07:00
Grant Sanderson
a204e422a5 Get rid of do-nothing self.ctx.multisample line 2020-06-05 13:23:38 -07:00
Grant Sanderson
e5a215cbd6 Have rectangles drawn in ccw order 2020-06-05 13:23:15 -07:00
Grant Sanderson
a3e76334a6 Nix shade_in_3d stuff 2020-06-05 13:22:53 -07:00
Grant Sanderson
b4fb0955a6 Get rid of sheen factor 2020-06-05 13:21:59 -07:00
Grant Sanderson
b2137f2746 Fixed z_to_vector for vectors on z-axis 2020-06-05 13:21:35 -07:00
Grant Sanderson
cacfe67fe1 ParametricSurface replaces the role of SurfaceMobject, and instead of tracking normals infinitesimal nudges are tracked 2020-06-05 11:12:52 -07:00
Grant Sanderson
efe15cf2f0 normalize_along_axis 2020-06-05 11:12:11 -07:00
Grant Sanderson
a62a4ae02b Make sure Point has points of type float 2020-06-05 11:11:46 -07:00
Grant Sanderson
54598f92c7 Remove unnecessary import 2020-06-05 11:11:11 -07:00
鹤翔万里
0f998615ad Merge pull request #6 from 3b1b/shaders
update shaders branch
2020-06-05 08:20:26 +08:00
Grant Sanderson
2b931dc7a2 Improvements to surfaces, with textured surfaces available 2020-06-04 17:17:38 -07:00
Grant Sanderson
4c33b99d39 Very rudimentary 3dSurface type 2020-06-04 15:41:20 -07:00
Grant Sanderson
e4419204cb Got stroke shaders working in 3d 2020-06-04 11:29:36 -07:00
Grant Sanderson
23bbdc63ba Fix up fill shaders to work when being viewed from different orientations, along with several other little bugs 2020-06-03 17:10:33 -07:00
Grant Sanderson
adac5690b7 Have banner remember pis 2020-06-03 17:09:39 -07:00
Grant Sanderson
a232c32756 Changed camera frame from working in quaternions to working in Euler angles. For shame. 2020-06-03 10:38:57 -07:00
Grant Sanderson
38cc0a7174 Added glossiness to VMobjects 2020-06-02 16:18:44 -07:00
Grant Sanderson
725a7e3121 Enable 3d rotations 2020-06-01 16:21:18 -07:00
Grant Sanderson
e882356264 Small cleanups to the shader files 2020-05-31 17:31:03 -07:00
Grant Sanderson
00dcc14df1 Fixed the random-dimples-on-zeros bug while fixing up the fill shaders 2020-05-31 17:02:05 -07:00
Kyle Cheng
435a2631c9 Fixed typo from "depricated" to "deprecated" 2020-05-31 09:44:39 -07:00
Grant Sanderson
270e93f6f0 Merge 2020-05-30 16:53:53 -07:00
Grant Sanderson
9a8323cbb7 Changes for recent videos 2020-05-30 16:49:57 -07:00
Grant Sanderson
593c249bbd Tiny comment 2020-05-30 16:49:27 -07:00
Grant Sanderson
ccb47db3bb fix pixel_coords_to_space_coords 2020-05-30 16:48:01 -07:00
Vivek Verma
82d6ad0ef5 Add dot_color to BulletedList 2020-05-28 11:19:08 -07:00
Devin Neal
3c1a6bb8b1 Merge pull request #1091 from applemonkey496/patch-3
Add missing import to brace.py
2020-05-20 20:24:59 -07:00
Devin Neal
00ff47855e Merge pull request #1069 from applemonkey496/patch-1
Fix "itslef" to "itself"
2020-05-20 20:21:10 -07:00
applemonkey496
45c5ec7091 Add missing import to brace.py
Without `import copy` lines 128 to 131 will throw an error. I've tested this edit in my local version of the library and it fixes the bug.
2020-05-20 20:07:13 -07:00
Tony031218
4d78e0c63e fix changing coordinates color 2020-05-15 12:36:55 +08:00
Devin Neal
aff2d21bad Merge pull request #734 from zombie110year/master
latex can't recognize path seperator \\ in windows
2020-05-14 21:13:02 -07:00
applemonkey496
c82b1fc2c9 Fix "itslef" to "itself"
I know this is trivial, but I had to fix it.
2020-05-14 12:42:56 -07:00
Devin Neal
ca0b7a6b06 Merge pull request #1066 from 3b1b/remove-sanim
Remove sanim directory
2020-05-13 23:06:04 -07:00
Devin Neal
d31be357e5 Remove sanim directory 2020-05-13 23:04:31 -07:00
Aathish
a529a59abf Added DocStrings for all methods in Container, Scene, GraphScene, MovingCameraScene, SceneFileWriter, ThreeDScene, SpecialThreeDScene, ZoomedScene, VectorScene, and LinearTransformationScene. (#1040)
* Added DocStrings for methods in Container and Scene.
Removed 2 unused imports from scene.py.

* Added DocStrings for all methods in GraphScene, MovingCameraScene, SceneFileWriter, ThreeDScene, SpecialThreeDScene and ZoomedScene.

* Added DocStrings for all methods in `VectorScene` and LinearTransformationScene...
...except `position_x_coordinate` and `position_y_coordinate`

Co-authored-by: Aathish Sivasubrahmanian <aathishs@Aathishs-MacBook-Air.local>
2020-05-13 22:41:22 -07:00
NavpreetDevpuri
cf656e9c21 Code() in file Code_mobject.py to display code with color highlighted added Paragraph() and "exact_spaces" parameter to Text() (#1036) 2020-05-13 22:19:09 -07:00
NavpreetDevpuri
7f1a15b6ba Fixed ffmpeg 'Impossible to Open' and 'Protocol not found' (#1057) 2020-05-13 22:13:56 -07:00
Erik White
f3f9d0dfb7 Correctly return get_unit_size 2020-05-13 19:15:01 +03:00
Kubo Kovac
2f26a32f96 remove superfluous code 2020-05-10 14:58:01 +02:00
peninha
6a571262fd Corrected a bug in stretch_to_fit_depth function 2020-05-10 01:40:21 -03:00
Devin Neal
dbdd799696 Remove versions from requirements.txt 2020-05-07 11:31:54 -07:00
鹤翔万里
d83fa90606 Fix Text Class's bugs in shaders branch (the same as #1030) (#1031)
* fix: remove the last M tag in svg files to make Text run in shaders branch

* fix: close the svg path manually to fix the bug of wrong stroke

* fix: remove Space mobjects in Text to fix the bug of TransformText

* feat: make Text and TextMobject equal in size

* this will lead to more bugs of setting color, so I delete it

* fix typo in text_mobject.py

* fix conflict of default size and height
2020-05-07 01:21:43 -07:00
XiaoYoung
522a5b3c5f Fix space characters problem of Text (#1035)
* Fix Text wrong display

* Fix space characters problem of Text

* Fix a potential bug using height or width in Text

* Update Text

* Fix typo in text_mobject.py
2020-05-07 01:16:39 -07:00
鹤翔万里
3362f93964 Fix three bugs(shaders/stroke/size) of Text Class (text_mobject.py) (#1030)
* fix: remove the last M tag in svg files to make Text run in shaders branch

* fix: close the svg path manually to fix the bug of wrong stroke

* fix: remove Space mobjects in Text to fix the bug of TransformText

* feat: make Text and TextMobject equal in size

* this will lead to more bugs of setting color, so I delete it
2020-05-05 00:12:22 -07:00
Mike Magruder
af65c9d5d4 Performance improvement for most scenes (#974)
tl;dr: this is a significant performance improvement for many scenes. 1.7x - 2.6x improvement in animation it/s.

This is a small change to some of the hotest paths in rendering objects. The biggest win comes from not using np.allclose() to check if two points are close enough. In general, NumPy is awesome at operating on large arrays, but overkill for very tiny questions like this. Created a small function to determine if two points are close using the same algorithm, and limited it to 2D points since that's all we need in set_cairo_context_path().

A couple of other minor tweaks to reduce or eliminate other uses of NumPy in this path.

In general, it is better to avoid wrapping lists in np.array when a real NumPy array isn't actually needed.

Added a new file for performance test scenes, with a single scene from the end of a video I've been working on.

Data:

MacBook Pro (16-inch, 2019)
macOS Catalina 10.15.4
2.4 GHz 8-Core Intel Core i9
64 GB 2667 MHz DDR4
Python 3.7.3 (default, Mar  6 2020, 22:34:30)

Profiler: yappi under Pycharm.

Using the scene Perf1 from the included perf_scenes.py, averaged over 5 runs and rendered with:
manim.py perf_scenes.py Perf1 -pl --leave_progress_bars

Before:
Animation 0: FadeInTextMobject, etc.:               8.93it/s
Animation 1: ShowCreationParametricFunction, etc.: 84.66it/s

Profiler shows 48.5% of the run spent under Camera.set_cairo_context_path()

After
Animation 0: FadeInTextMobject, etc.:               23.45it/s  -- 2.63x improvement
Animation 1: ShowCreationParametricFunction, etc.: 149.62it/s  -- 1.77x improvement

Profiler shows 19.9% of the run spent under Camera.set_cairo_context_path()

Less improvement with production-quality renders, and percent improvement varies with scene of course. This appears to be a good win for every scene I'm working on though. I hope it will be for others, too.

NB: there are more perf improvements to be had, of course, but this is the best one I currently have.
2020-04-24 21:04:08 -07:00
XiaoYoung
f0cdcd90ba Fix Text wrong display (#889) 2020-04-23 20:36:57 -07:00
Devin Neal
19e3c97589 Revise config again (#987) 2020-04-17 02:51:25 -07:00
Devin Neal
811ee4d26b Merge pull request #986 from 3b1b/display-help
Display help if no input file is specified
2020-04-17 02:38:53 -07:00
Devin Neal
c847988e10 Display help if no input file is specified 2020-04-17 02:36:56 -07:00
Devin Neal
1bb2e8c237 Merge pull request #985 from 3b1b/remove-livestream
Remove livestream
2020-04-17 00:08:17 -07:00
Devin Neal
77ab3b8d3a Merge branch 'master' of github.com:3b1b/manim into dev 2020-04-17 00:00:36 -07:00
Devin Neal
87d8671995 Remove livestreaming option 2020-04-16 23:59:22 -07:00
Devin Neal
ec4a70ad35 Merge pull request #950 from kolibril13/patch-1
Changed -1 to -1.0 for broader GPU suppot.
2020-04-15 22:17:07 -07:00
Devin Neal
f0796055cc Update README.md 2020-04-15 20:08:02 -07:00
Happy
93ebd66853 Update readme to reflect #571 2020-04-12 13:07:40 -07:00
Grant Sanderson
965564853b Published pdf video 2020-04-12 09:54:20 -07:00
Grant Sanderson
6e523ed960 Clearer defaults 2020-04-12 09:54:13 -07:00
Grant Sanderson
2d0257562f End scenes after embed 2020-04-12 09:53:29 -07:00
Grant Sanderson
0b8cb3b6e1 Leaving a note for the better color-preserving encoding 2020-04-12 09:53:14 -07:00
Grant Sanderson
50e00a3a89 Updates to scenes before early release of (the actual) beta2 2020-04-09 12:52:13 -07:00
Grant Sanderson
1525d5ff16 Make patron screen scroll time a variable 2020-04-09 12:51:49 -07:00
Grant Sanderson
427ad698fe Animation for reworked beta2 2020-04-07 12:36:32 -07:00
Grant Sanderson
94c121bcf7 Default arrange_in_grid should have it draw rows first 2020-04-07 12:36:17 -07:00
Grant Sanderson
13f0ef30c0 Small video-specific tweaks 2020-04-06 11:57:35 -07:00
鹤翔万里
abc018e0d8 Merge pull request #2 from chenxijun/patch-1
Make "shaders" branch work
2020-04-06 11:48:40 +08:00
尘息
abe1ea78d0 It's too old 2020-04-03 14:32:08 +08:00
尘息
229c809a4b Fix a bug in extract_scene.py 2020-04-01 13:45:24 +08:00
kolibril13
6eabbe943b Changed -1 to -1.0 for broader GPU suppot.
Some GLSL compilers are more sensitive to types than others. With this fix, my Intel HD Graphics 5500 (Broadwell GT2) gives no error on this script anymore.
2020-03-30 20:26:06 +02:00
Lalourche
1b125df572 Fixed execution of counting.py 2020-03-28 22:02:13 +01:00
Grant Sanderson
2ce0b72c44 Final scenes for SIR video 2020-03-27 12:04:42 -07:00
Grant Sanderson
8384b8b46b Fix bug with clock 2020-03-27 12:04:30 -07:00
Grant Sanderson
7c0bf2c015 Add args to VMobject.flip 2020-03-27 12:04:16 -07:00
Grant Sanderson
6fee2f5a0d Simulations for an SIR epidemic model 2020-03-19 10:47:05 -07:00
Grant Sanderson
f7ad9e71e0 Separate time_based_updaters and non_time_updaters 2020-03-19 10:46:50 -07:00
Grant Sanderson
6880ebcbc2 Finishing touches before beta1 public and beta2 private releases 2020-03-17 10:33:02 -07:00
Grant Sanderson
04459ae68d Most animations for second beta video 2020-03-14 16:53:21 -07:00
Grant Sanderson
23440d020f Add pfp as abreviation for point_from_proportion 2020-03-14 16:53:02 -07:00
Grant Sanderson
ab817c0962 Fix blink 2020-03-14 16:52:33 -07:00
Grant Sanderson
6c391a7580 Changes to beta before early release of beta1 2020-03-13 14:06:39 -07:00
Grant Sanderson
0c9447a94a Final edits for covid video 2020-03-13 14:06:22 -07:00
Grant Sanderson
b0aacda655 Add count in from 2020-03-13 14:06:08 -07:00
Grant Sanderson
d5b2160c64 Updating end screen 2020-03-13 14:05:53 -07:00
Grant Sanderson
627f122b3f Remove VMobject.set_fill defaulting 2020-03-13 14:05:34 -07:00
Devin Neal
48f2a1ec3c Re-add documentation link 2020-03-13 03:16:59 -07:00
Solara570
99519090fb Small fix to NumberPlane construction 2020-03-08 17:12:38 +08:00
Grant Sanderson
85bfde68a1 All animations for the covid video, done in a frantic fugue state 2020-03-07 21:04:00 -08:00
Grant Sanderson
3e84a2f30f Latest beta animations 2020-03-07 21:03:11 -08:00
Grant Sanderson
aa016bf1ac Dumb 2020-03-07 20:54:19 -08:00
Grant Sanderson
e8b0ecfede Fix endscreen 2020-03-07 20:53:58 -08:00
Grant Sanderson
5a780dfde3 Flash did not use stroke_width 2020-03-07 20:53:48 -08:00
Grant Sanderson
2c80b6f62d Latest scenes from beta 2020-03-06 06:17:21 -08:00
Grant Sanderson
0ad64329f6 Fix to NumberPlane 2020-03-06 06:17:12 -08:00
Grant Sanderson
ace2b7fea4 Don't deepcopy parents 2020-03-06 06:16:52 -08:00
Grant Sanderson
f83cfc42b1 Fix set_fill 2020-03-06 06:16:28 -08:00
Grant Sanderson
7785a06441 Move where refreshing shader uniforms happens 2020-03-06 06:16:09 -08:00
Grant Sanderson
cfe72922ca Have rotate_vector return same type as input 2020-03-06 06:15:28 -08:00
Grant Sanderson
8fc6c8107a Latest beta animations 2020-02-27 17:20:31 +00:00
Grant Sanderson
06123f956a Don't deepcopy Arrow by default 2020-02-27 17:19:50 +00:00
Grant Sanderson
ed1cbe32ff Don't copy a mobject's parents 2020-02-27 17:19:15 +00:00
Grant Sanderson
6593eab9a0 Change default stroke width of number line 2020-02-27 17:18:10 +00:00
Grant Sanderson
6e0ae83685 Small fixes 2020-02-27 17:17:53 +00:00
Grant Sanderson
40b651d661 Reformat 2020-02-27 17:17:33 +00:00
Grant Sanderson
3cc9bf7052 Bug fix to refresh_triangulation 2020-02-27 17:17:10 +00:00
Grant Sanderson
f4776626e4 Shorten name to index_labels 2020-02-27 17:16:10 +00:00
Grant Sanderson
1b497d31ff New scenes for beta 2020-02-23 23:00:03 +00:00
Grant Sanderson
d4790beb24 Adding pi_font 2020-02-23 22:59:53 +00:00
Grant Sanderson
60b1e284f3 Don't embed when writing to file with no preview 2020-02-23 22:59:29 +00:00
Grant Sanderson
8485ff8c76 Have vmob.set_opacity default to opacity 1 if it's not specified 2020-02-23 22:59:11 +00:00
Grant Sanderson
8159f701f4 Typo fix 2020-02-23 22:58:47 +00:00
Grant Sanderson
d794ff8bc9 Revert last change 2020-02-23 22:58:34 +00:00
Grant Sanderson
26dccfe9a7 Make input_to_graph_point always use a binary search, since graph's have uneven density now 2020-02-23 22:56:50 +00:00
Grant Sanderson
da8dc4ea03 Unlock pi creature triangulation 2020-02-23 22:56:26 +00:00
Grant Sanderson
b0c80a7a91 More scenes for beta 2020-02-22 13:21:15 -08:00
Grant Sanderson
34ae76ab7f Have restructure_list_to_exclude_certain_family_members work with the full family of to_remove 2020-02-22 13:20:59 -08:00
Grant Sanderson
f4a33c5bfb Small fix 2020-02-22 13:20:37 -08:00
Grant Sanderson
7b198545bb Get rid of old methods 2020-02-22 13:20:22 -08:00
Grant Sanderson
ed6085d07c Add replace_submobject 2020-02-22 13:19:51 -08:00
Grant Sanderson
11a4d7696e Change implementation of pointwise_become_partial not to change the number of points 2020-02-22 13:19:26 -08:00
Grant Sanderson
c8befa5b9a Fix bug with eyes 2020-02-22 13:18:50 -08:00
Devin Neal
422e86e0da Remove dead documentation link 2020-02-21 20:28:43 -08:00
Grant Sanderson
0b0dbcb5d8 Replace np.tan with math.tan...because why not 2020-02-21 12:01:39 -08:00
Grant Sanderson
2ca0726cd7 Add self.shader_data_is_locked condition to get_shader_info_list 2020-02-21 12:01:17 -08:00
Grant Sanderson
41e2fd76d1 Make Rotate a subclass of Rotation, not Transform 2020-02-21 12:00:50 -08:00
Grant Sanderson
68ac16e5fb Move rendering back to camera 2020-02-21 12:00:34 -08:00
Grant Sanderson
fa7f340cd3 Replace np.<trig> with math.<trig> 2020-02-21 10:57:10 -08:00
Grant Sanderson
ea59950b2c Have mobjects track family and parents more directly 2020-02-21 10:56:40 -08:00
Grant Sanderson
b825b36b60 Slight fix to triangulation 2020-02-20 16:50:34 -08:00
Grant Sanderson
6be41fec6d Add simple function to measure runtime 2020-02-20 16:50:13 -08:00
Grant Sanderson
bafc8c88d5 subdivide_sharp_curves -> should_subdivide_sharp_curves 2020-02-20 16:49:56 -08:00
Grant Sanderson
8d3ec1afd0 Don't worry about aligning points of vmobjects with same number of points 2020-02-20 16:49:36 -08:00
Grant Sanderson
306344e9c1 Add possibility for add_line to add more points...makes for better svg alignment 2020-02-20 15:52:57 -08:00
Grant Sanderson
eb121c922b Small edits 2020-02-20 15:52:23 -08:00
Grant Sanderson
ec017bd1ae Insignificant style edit 2020-02-20 15:51:26 -08:00
Grant Sanderson
16ea2a0104 Fix bug with pi creature 2020-02-20 15:51:04 -08:00
Grant Sanderson
c88bcc1a3c Get rid of get_point_mobject 2020-02-20 10:03:47 -08:00
Grant Sanderson
57b1523d96 Various bits of cleanup and micro speedups 2020-02-20 10:03:36 -08:00
Grant Sanderson
c794039b9d Replacing apply_along_axis 2020-02-19 23:43:33 -08:00
Grant Sanderson
0176bda584 Replace np.apply_along_axis with arr.min 2020-02-19 23:32:35 -08:00
Grant Sanderson
b7f9257b3c New small beta scene 2020-02-19 23:27:11 -08:00
Grant Sanderson
ad1caca45e Remove get_moving_mobjects 2020-02-19 23:26:54 -08:00
Grant Sanderson
51167e19fe Rename and move around lock_static_mobject_data 2020-02-19 23:21:41 -08:00
Grant Sanderson
b373b7936a Move rendering to Mobject, and be smarter about caching data and vbo 2020-02-19 23:13:29 -08:00
Grant Sanderson
07cda695bb Finally, some work on the beta video 2020-02-18 22:43:23 -08:00
Grant Sanderson
671042cd20 Replace np.clip with clip, and other small changes 2020-02-18 22:43:06 -08:00
Grant Sanderson
d24a757609 Have LaggedStartMap remember group 2020-02-18 22:41:55 -08:00
Grant Sanderson
0be5abceb9 Small bug fix 2020-02-18 22:40:12 -08:00
Grant Sanderson
f1475463fc Just moving things around 2020-02-18 22:34:22 -08:00
Grant Sanderson
0ed5acd6c6 Adding directory for mobject_points 2020-02-18 22:33:58 -08:00
Grant Sanderson
dd7f8aac8d Default unlock triangulation for pi creature 2020-02-18 22:33:35 -08:00
Grant Sanderson
ba0d677c15 Small fixes 2020-02-18 22:33:22 -08:00
Grant Sanderson
b504899714 Replace np.clip with clip 2020-02-18 22:32:57 -08:00
Grant Sanderson
065979e2e1 A few small formatting changes 2020-02-18 22:32:43 -08:00
Grant Sanderson
8f8119509d Replace np.clip with clip 2020-02-18 22:32:15 -08:00
Grant Sanderson
6b69ed2174 Add a small todo 2020-02-18 22:32:02 -08:00
Grant Sanderson
01cda8a130 Fix a few problems with PlayingCard 2020-02-18 22:31:49 -08:00
Grant Sanderson
8ad1c58f9e Fix bug with recursive paths 2020-02-18 22:31:29 -08:00
Grant Sanderson
e9504b7010 A few small cleanups 2020-02-18 22:31:18 -08:00
Grant Sanderson
9f3551f43b Change how play/wait timing works with the window 2020-02-18 22:30:43 -08:00
Grant Sanderson
26a872be94 Replace rotation_matrix with rotation_matrix_transpose 2020-02-18 22:29:56 -08:00
Grant Sanderson
54067db386 Replace np.clip with clip 2020-02-18 22:27:28 -08:00
Grant Sanderson
34a1896ea8 Add custom clip function, since np.clip is evidently super slow 2020-02-18 22:27:13 -08:00
Grant Sanderson
67d9762773 Use quaternions to find rotation matrix 2020-02-18 22:25:54 -08:00
Grant Sanderson
6e932a24d2 Change defaults on when triangulation is locked...again 2020-02-17 14:01:46 -08:00
Grant Sanderson
47daf8e7f7 Have mobject.get_shader_info_list handle all of its submobjects 2020-02-17 12:15:53 -08:00
Grant Sanderson
9d4b16d03f Moved around where batching mobjects by shader type occurs, while also pulling out some of the shader_id helper functions 2020-02-17 12:14:40 -08:00
Grant Sanderson
673b85f129 Prep quadratic bezier shaders to work in 3d 2020-02-16 10:53:16 -08:00
Grant Sanderson
da7864b28c Remove ANTI_ALIAS_WIDTH 2020-02-14 17:00:36 -08:00
Grant Sanderson
6fe68dbc7a Record locked traingulation even on vmobs without points 2020-02-14 17:00:17 -08:00
Grant Sanderson
d03b32d249 Bug fix 2020-02-14 16:59:24 -08:00
Grant Sanderson
3982303fcc Default to locked triangulation for texmobjects, not all svgs 2020-02-14 16:59:12 -08:00
Grant Sanderson
aa06a3c111 Make it so that changing stroke, when there is background stroke, won't default it back to foreground 2020-02-14 16:27:23 -08:00
Grant Sanderson
dc8eb317dd Improving embed 2020-02-14 16:26:49 -08:00
Grant Sanderson
8402b9ea53 Add mouse points, embed, and move mobject updating to update_frame 2020-02-14 15:30:44 -08:00
Grant Sanderson
9186fa5551 Have vectorized point inherit from point 2020-02-14 15:30:04 -08:00
Grant Sanderson
d061bafaa2 Add Point mobject 2020-02-14 15:29:52 -08:00
Grant Sanderson
ba89ad7450 Forget about using remove_list_redundancies 2020-02-14 15:29:35 -08:00
Grant Sanderson
b73ebb9cf5 Go back to scene recomputing mobject families on each frame, and fix a bug with skipping 2020-02-14 11:55:07 -08:00
Grant Sanderson
49d84fccde Fixed edge case in inserting n curves for null curves 2020-02-14 10:54:46 -08:00
Grant Sanderson
b0b71910a5 Couple notes on the problems with Mobject.show 2020-02-14 10:53:52 -08:00
Grant Sanderson
bf83aed43b Have ANTI_ALIAS_WIDTH scale with frame size 2020-02-14 10:53:05 -08:00
Grant Sanderson
1a0b0e748c Fixed pixel_coords_to_space_coords 2020-02-14 10:52:39 -08:00
Grant Sanderson
0912043248 get_shader_data_array -> get_blank_shader_data_array 2020-02-13 15:51:16 -08:00
Grant Sanderson
cfbcd9faa8 Remove distinction between moving mobjects and static mobjects...computations to figure this out may now outweigh the actual render times they save 2020-02-13 15:42:53 -08:00
Grant Sanderson
5df2d3db33 Have mobjects keep track of a consistent shader data array to avoid unneeded numpy initializing 2020-02-13 15:41:57 -08:00
Grant Sanderson
c654ca4506 Remove usage of np.append 2020-02-13 12:03:54 -08:00
Grant Sanderson
c780a7471b Default SVG paths and dots to have locked triangulation 2020-02-13 11:56:39 -08:00
Grant Sanderson
095a3ef28c Change how bounding box points are calculated, in anticipation of a time when these are more intelligently cached 2020-02-13 11:43:59 -08:00
Grant Sanderson
574b464a3c get_critical_point -> get_bounding_box_point 2020-02-13 10:54:09 -08:00
Grant Sanderson
176079b678 Note that ZoomedScene is broken 2020-02-13 10:50:56 -08:00
Grant Sanderson
8db7756d2e A little more window initialization 2020-02-13 10:50:38 -08:00
Grant Sanderson
7789038409 Fix bug with fbo initialization 2020-02-13 10:49:43 -08:00
Grant Sanderson
53abf506fc Change config defaults 2020-02-13 10:49:25 -08:00
Grant Sanderson
183bae0825 Move window operations to Scene 2020-02-13 10:42:07 -08:00
Grant Sanderson
c591954fc3 Small formatting change 2020-02-13 10:41:55 -08:00
Grant Sanderson
65828e0e36 Have mobjects pass texture data to camera, and change pixel_shape to come from the fbo viewport 2020-02-13 10:40:21 -08:00
Grant Sanderson
e5d8f83dbf Implemented ImageMobject with shaders 2020-02-13 10:39:26 -08:00
Devin Neal
c896f58bbd Merge pull request #877 from azarzadavila/master
Typo in super() 77acc99
2020-02-12 22:38:21 -08:00
Grant Sanderson
3f0cc56665 Separate out the point_to_gl_Position function, which needs to be updated later 2020-02-12 18:05:22 -08:00
Grant Sanderson
50c7dd7d48 Don't have fill shader use quick (flawed) sdf 2020-02-12 13:24:15 -08:00
Grant Sanderson
eb89d45937 Have get_quadratic_approximation_of_cubic default to midpoint when there is no inflection 2020-02-12 12:53:21 -08:00
Grant Sanderson
cb31ce3049 Temporarily(?) allow stroke shader to sometimes cross triangles so as to avoid other artifacts 2020-02-12 12:51:36 -08:00
Grant Sanderson
ec90bb2e8a Change step size defaults on ParametricFunction 2020-02-12 12:49:46 -08:00
Grant Sanderson
5cfae1ea75 Remove unneeded import 2020-02-12 11:50:05 -08:00
Grant Sanderson
4b827adfee Rewrite insert_n_curves_to_point_list to be faster and more even. And honestly much less confusing 2020-02-12 11:49:51 -08:00
Grant Sanderson
c0a29c4c74 Have partial_bezier_points return list, not numpy array 2020-02-12 11:49:16 -08:00
Grant Sanderson
9835813679 Rename generate_points to init_points 2020-02-11 19:55:00 -08:00
Grant Sanderson
c7a99769ce Change order of camera.reset_pixel_shape args 2020-02-11 19:53:15 -08:00
Grant Sanderson
19814ecf87 Allow mobject to prepare and cleanup from animations 2020-02-11 19:52:41 -08:00
Grant Sanderson
ebd4016fb3 Small refactor of extract_scene et. al. 2020-02-11 19:52:14 -08:00
Grant Sanderson
960e918e61 Basic preview window 2020-02-11 19:51:19 -08:00
Grant Sanderson
2cf21fd0ad Add file opening operations to SceneFileWriter 2020-02-11 19:50:36 -08:00
Grant Sanderson
15e3178721 Incorporate frame_center in translation to gl_Position 2020-02-11 19:49:54 -08:00
Grant Sanderson
052aa8afe2 Changed angle methods 2020-02-11 19:48:50 -08:00
Grant Sanderson
699b886d68 Have svg paths subdivide sharper curves 2020-02-10 14:48:53 -08:00
Grant Sanderson
3634cb712d Fix triangulation 2020-02-10 14:48:28 -08:00
Grant Sanderson
f98513dfc2 Remove unneeded import 2020-02-10 14:48:07 -08:00
Grant Sanderson
7ce75bdb52 Added wrapper around mapbox triangulation to make it work for polygons with holes 2020-02-10 14:47:36 -08:00
azarzadavila
97a0a707d7 Typo in super() 77acc99 2020-02-09 11:31:54 +01:00
Grant Sanderson
b243c522b1 Have Mobject pass their own render primative 2020-02-07 09:37:21 -08:00
Grant Sanderson
1018cca4eb Remove unneeded import 2020-02-07 09:36:56 -08:00
Grant Sanderson
1e0c701733 Change behavior of Z in svg commands 2020-02-07 09:35:57 -08:00
Grant Sanderson
247f3ac2c4 Change behavior of Z command in svgs 2020-02-07 09:35:28 -08:00
Grant Sanderson
050ed718e5 Small todo stubs as a reminder to relpace 3d VMobject material 2020-02-07 09:32:38 -08:00
Grant Sanderson
9b3d294464 Change fill shaders to compute orientation inside 2020-02-07 09:31:57 -08:00
Grant Sanderson
db0029c32b Fix error in get_quadratic_approximation_of_cubic 2020-02-07 09:31:06 -08:00
Grant Sanderson
1a13d32452 Get rid of join_structured_arrays 2020-02-07 09:30:47 -08:00
Grant Sanderson
6892e511fe Trying a smaller anti_alias width 2020-02-06 10:03:42 -08:00
Grant Sanderson
10b9f2224f Change fallback directory for pi creature 2020-02-06 10:03:04 -08:00
Grant Sanderson
ccef2485b2 Refactor svg reading 2020-02-06 10:02:42 -08:00
Grant Sanderson
8c07fcca24 Various add_smooth_curve_to functions 2020-02-06 10:02:13 -08:00
Grant Sanderson
cf2d8d47e6 Fixed get_quadratic_approximation_of_cubic to account for cubics with an inflection point between 0 and 1 2020-02-06 10:01:19 -08:00
Grant Sanderson
7685fd03c6 Whoops, let an accidental deletion slip through 2020-02-06 10:00:55 -08:00
Grant Sanderson
6db6e858c4 Change tuplify to listify 2020-02-05 14:47:14 -08:00
Grant Sanderson
661bf33982 Change CubicBezier parameters 2020-02-05 14:46:45 -08:00
Grant Sanderson
f8d7daa14f Change geometry mobjects to work with quadratic bezier curves 2020-02-05 14:46:25 -08:00
Grant Sanderson
f8d293493f Change VMobject to operate with quadratic bezier curves 2020-02-05 14:46:04 -08:00
Grant Sanderson
0a82229ac1 Have stroke/fill vert shaders take in 3d points 2020-02-05 14:45:42 -08:00
Grant Sanderson
025f6d9524 Tiny stylistic change to rgb_to_hex 2020-02-05 14:44:35 -08:00
Grant Sanderson
c34bb7912c Added stretch_array_to_length_with_interpolation 2020-02-05 14:44:16 -08:00
Grant Sanderson
9da5ef4743 Changing patron name default 2020-02-04 15:29:05 -08:00
Grant Sanderson
0fe05ce07d Starting to chase scene to account for a shader-based camera 2020-02-04 15:28:50 -08:00
Grant Sanderson
1549998a19 Adding ANTI_ALIAS_WIDTH and SHADER_DIR, removing DEFAULT_POINT_DENSITY_* 2020-02-04 15:28:29 -08:00
Grant Sanderson
e185b87195 Moving some functions away from MovingCamera. Soon, all that should be default behavior of Camera 2020-02-04 15:27:50 -08:00
Grant Sanderson
63e5f343a3 Begin setting up Camera to work with shaders, not yet done 2020-02-04 15:27:21 -08:00
Grant Sanderson
81dde53f5a Get rid of various PMobject types 2020-02-04 15:26:39 -08:00
Grant Sanderson
8488b9053d Removed live_streaming conditions, as those don't work anyway and will be replaced in functionality soon. Also have the ffmpeg pipe take in raw bytes directly, rather than going through the intermediary of a numpy array 2020-02-04 15:26:09 -08:00
Grant Sanderson
ed376e475d Added get_quadratic_approximation_of_cubic 2020-02-04 15:25:08 -08:00
Grant Sanderson
24d3ba8680 Added join_structured_arrays 2020-02-04 15:24:40 -08:00
Grant Sanderson
13b69a14d8 Added find_intersection 2020-02-04 15:24:16 -08:00
Grant Sanderson
8638f7303a Added quadratic bezier shader files 2020-02-03 10:52:39 -08:00
Grant Sanderson
3c57c461b5 Merge 2020-02-03 09:17:35 -08:00
Grant Sanderson
30728879be Merge pull request #871 from 3b1b/bayes
Bayes
2020-02-03 09:16:21 -08:00
Grant Sanderson
edd447527d Added small todo stub 2020-02-03 09:11:51 -08:00
Grant Sanderson
40c8b7db76 Removed the option for displaying to excluse submobjects 2020-01-16 11:04:11 -08:00
Grant Sanderson
1609be6d49 Created and moved extract_mobject_family_members and restructure_list_to_exclude_certain_family_members functions 2020-01-15 18:30:58 -08:00
Grant Sanderson
1917349c4a Removed foreground mobjects 2020-01-15 18:01:28 -08:00
Grant Sanderson
cd14dea021 Beginning beta project 2020-01-15 18:00:43 -08:00
Grant Sanderson
77acc999cd Rename number_line_config to axis_config 2020-01-15 15:40:30 -08:00
Grant Sanderson
1279f040da Temporarily adding input_file_path to SceneFileWrite config. Not sure why this isn't there already, or if there are problems with setting a default, but it fixed a weird bug that had arisen 2020-01-11 17:14:02 -08:00
Grant Sanderson
0f71b0a408 Playing wiht logo 2020-01-11 17:13:02 -08:00
Grant Sanderson
ada09f1928 Editing old name animations 2020-01-11 17:12:44 -08:00
Grant Sanderson
839fb4ff58 Merge pull request #853 from 3b1b/bayes
Bayes
2020-01-06 09:43:06 -08:00
Grant Sanderson
24d077fbce Change referenced directory of 3b1b content in LICENSE and README 2020-01-06 09:39:33 -08:00
Grant Sanderson
16f8c025cd Small tweaks to old videos when revisiting their animations 2020-01-06 09:38:54 -08:00
Mario Varas
b5a75c3250 #806 typo in WriteStuff 2019-12-23 11:29:19 -05:00
Grant Sanderson
6fe082a5d8 Preliminary end to Bayes project 2019-12-19 19:42:50 -08:00
Grant Sanderson
0e92deddc4 Change ShowSubmobjectsOneByOne defaults 2019-12-19 19:42:28 -08:00
Grant Sanderson
fa2c831ef3 Support UTF8 tex 2019-12-19 19:42:06 -08:00
Grant Sanderson
2916990077 Change from old_projects to from from_3b1b.old 2019-12-17 10:07:37 -08:00
Grant Sanderson
ef6716625e Rename 3b1b_projects to from_3b1b 2019-12-17 09:45:07 -08:00
Grant Sanderson
a138cea3ed Pulled bayes.py into a folder for more bayes projects 2019-12-17 09:40:32 -08:00
Grant Sanderson
1387d88043 Preliminary end to bayes, part 1 2019-12-17 09:39:11 -08:00
Grant Sanderson
9deb2d3732 Change patron end screen 2019-12-17 09:38:18 -08:00
Grant Sanderson
a95318f1ab Fix print_family 2019-12-17 09:37:59 -08:00
Grant Sanderson
5ea6c0f525 Bayes scenes up to GlimpseOfNextVideo 2019-12-15 08:45:40 -08:00
Grant Sanderson
c74cfa3c5d Add error message for ApplyFunction 2019-12-15 08:44:57 -08:00
Grant Sanderson
5cce05fc46 Scenes up to IntroduceLynda 2019-12-12 14:40:42 -08:00
Grant Sanderson
c2838d78a2 Forgot to propagate kwargs in Underline 2019-12-12 14:40:08 -08:00
Grant Sanderson
ba2f2f8840 Merge pull request #829 from 3b1b/bayes
Bayes
2019-12-10 21:47:09 -08:00
Grant Sanderson
ebd4fbd1d2 Halfway through CreateFormulaFromDiagram 2019-12-10 21:36:58 -08:00
Grant Sanderson
b1d8d1081c Merge branch 'master' of github.com:3b1b/manim into bayes 2019-12-10 13:39:48 -08:00
Grant Sanderson
c579fb521e Up to WhenDoesBayesApply in bayes 2019-12-10 13:39:42 -08:00
Grant Sanderson
fc28375e42 Changed modification for tex mobjects that begin with a newline, which involved eliminating alignment when a TexMobject creates many SingleStringTexMobject to figure out how to divvy itself up 2019-12-10 13:39:25 -08:00
Grant Sanderson
f89bb3e125 Added Underline 2019-12-10 13:38:30 -08:00
Grant Sanderson
3628b61d75 Change default color and bubble creation for teacher student scenes 2019-12-10 13:38:18 -08:00
Devin Neal
0bddadea35 Merge pull request #816 from fresnik/master
Documentation typo in constants.rst
2019-12-07 17:52:36 -08:00
Grant Sanderson
cfc5ecc59c First couple scenes of bayes 2019-12-06 17:11:04 -08:00
Grant Sanderson
72006334f5 Added a small fix to the issue of Tex inputs starting with a new line 2019-12-06 17:10:51 -08:00
Grant Sanderson
94a3883880 Remove Mobject.print_family, as that is now in utils.debug 2019-12-06 17:10:26 -08:00
Grant Sanderson
84e7bdb2b1 Added a couple helpful debugging functions 2019-12-06 17:10:00 -08:00
Grant Sanderson
b7cb9aa938 Typo fix 2019-12-05 12:45:01 -08:00
Grant Sanderson
259007954b Merge pull request #820 from 3b1b/projects-reorg
Reorganized files for 3b1b videos into a 3b1b_projects folder
2019-12-05 12:43:06 -08:00
Grant Sanderson
a51a6ab489 Reorganized files for 3b1b videos into a 3b1b_projects folder 2019-12-05 12:41:00 -08:00
Grant Sanderson
e57f08f46e Merge pull request #819 from 3b1b/hyperdarts
Hyperdarts
2019-12-05 12:33:14 -08:00
Grant Sanderson
2e25c4c0a3 Fixed old snow scene 2019-12-05 12:32:20 -08:00
Grant Sanderson
bc593695f9 Fixed old confetti scene 2019-12-05 12:31:53 -08:00
Grant Sanderson
9811564f70 TODO stub 2019-12-05 12:31:23 -08:00
Grant Sanderson
32e4daaeba Typo fix to moduli 2019-12-05 12:31:06 -08:00
Grant Sanderson
aaff13a079 Merge branch 'master' of github.com:3b1b/manim into hyperdarts 2019-12-05 12:30:41 -08:00
Freyr Bergsteinsson
241030f916 Documentation typo in constants.rst, fixes issue #814 2019-12-05 00:23:34 +00:00
Devin Neal
2afa079b6a Merge pull request #780 from timgates42/bugfix/typo_installation
Fix simple typo: installtion -> installation
2019-11-27 23:10:48 -08:00
Devin Neal
637c48905a Merge pull request #805 from mavaras/master
#803 docs typo mistake
2019-11-27 22:56:21 -08:00
mavaras
43098a07e7 #803 docs typo mistake 2019-11-23 10:42:35 -05:00
Grant Sanderson
c37ece9007 Moved hyperdarts to old_projects 2019-11-18 09:29:21 -08:00
Grant Sanderson
aaebd8a5cf End of hyperdarts project 2019-11-18 09:28:58 -08:00
Grant Sanderson
6f70df0852 Animations for hyperdarts up to 7:00 2019-11-12 11:55:37 -08:00
Grant Sanderson
975c4dd03c Explicitly check for None, rather than truthiness, for Axes.get_coordinate_labels 2019-11-12 11:55:19 -08:00
Grant Sanderson
495ace2423 Merge pull request #790 from 3b1b/moduli
Moduli
2019-11-11 14:07:33 -08:00
Grant Sanderson
b651050dd0 Merge branch 'master' of github.com:3b1b/manim into moduli 2019-11-11 14:06:32 -08:00
Grant Sanderson
eb03a56dfc Finished triangle moduli space scene 2019-11-11 14:06:17 -08:00
Grant Sanderson
13193d209e Changed patron name ordering 2019-11-11 14:06:04 -08:00
Devin Neal
bcb8824e2c Merge pull request #698 from Elteoremadebeethoven/master_3b1b
Solve issue add sound in Windows 10
2019-11-06 16:21:58 -08:00
Devin Neal
1e3cf9fa78 Merge pull request #725 from Hammer7/master
Closes: #720
2019-11-06 16:21:23 -08:00
Tim Gates
b1b516e9c4 Fix simple typo: installtion -> installation 2019-10-31 22:38:41 +11:00
Grant Sanderson
0e1da5ef28 Merge pull request #777 from 3b1b/hyperdarts
Hyperdarts
2019-10-28 15:38:09 -07:00
Grant Sanderson
4df666e964 Merge branch 'master' of github.com:3b1b/manim into hyperdarts 2019-10-28 15:35:00 -07:00
Grant Sanderson
0729f2eb59 Retire spirals project 2019-10-28 15:34:55 -07:00
Grant Sanderson
c79474a57c Small changes to the ffmpeg args when writing video files 2019-10-28 14:40:46 -07:00
Devin Neal
ec9dd06d38 Merge pull request #748 from DzyubSpirit/fix-svg-width
Add default stroke width for the svg mobjects
2019-10-26 22:31:25 -07:00
Devin Neal
920d140e40 Merge pull request #776 from MathWhiz/patch-1
README.md fixes
2019-10-26 22:29:36 -07:00
Raymond Arndorfer
b163b1b685 Standardize README.md 2019-10-23 22:58:23 -05:00
Grant Sanderson
8c28017239 Small thumbnail change 2019-10-16 10:38:52 -07:00
Grant Sanderson
e1e66f3082 Merge pull request #752 from 3b1b/hyperdarts
Hyperdarts
2019-10-09 21:33:02 -07:00
Grant Sanderson
c4aefe9396 End of Prime Spiral video 2019-10-09 18:09:15 -07:00
Grant Sanderson
7674a9eaee Changed patreon end screen 2019-10-09 18:09:05 -07:00
DzyubSpirit
76c295a60b Add default stroke width for the svg mobjects
Closes: #747
2019-10-08 10:32:04 +03:00
Grant Sanderson
d80af64798 Many more scenes from the prime spirals video 2019-10-03 13:58:27 -07:00
Grant Sanderson
ccc51664f4 Still being dumb 2019-10-03 13:58:13 -07:00
Grant Sanderson
f66d6e4f97 Added AddTextWordByWord, but it's not yet working, presumably because of some bug in Succession. 2019-10-03 13:58:00 -07:00
Grant Sanderson
67f3d1584c A few filler scenes for spirals project 2019-09-30 12:06:35 -07:00
Grant Sanderson
c94aef8845 Have AnimationGroup initialize its runtime before begin is called. This way it can be composed 2019-09-30 12:06:17 -07:00
Grant Sanderson
4eb6c6fb5b Spiral animations Up to ExplainRays 2019-09-26 11:04:47 -07:00
Grant Sanderson
8e15846ec5 Tiny clean to spacing 2019-09-26 11:04:35 -07:00
Grant Sanderson
ff55e768c9 Spiral animations up to Label44Spirals 2019-09-24 14:40:39 -07:00
Grant Sanderson
557bbff36c Added PGroup 2019-09-24 14:40:21 -07:00
zombie110year
946367aa19 latex can't recognize path seperator \\ in windows
Modify path before transport it to system command
2019-09-24 22:12:22 +08:00
Grant Sanderson
2bb8afa9e0 Animations for the introduction of the prime spiral video 2019-09-19 13:39:02 -07:00
Grant Sanderson
42e0cd07ac Added support for changing and interpolating stroke_width on PMobjects 2019-09-19 13:38:46 -07:00
Grant Sanderson
307ac852a6 Added ShowSubmobjectsOneByOne 2019-09-19 13:38:03 -07:00
Grant Sanderson
ffecd03cb2 Begining of spirals video, which is my newfound distraction 2019-09-18 15:38:27 -07:00
Grant Sanderson
0f037651f3 Small modifications to some old name animations 2019-09-18 15:38:02 -07:00
Grant Sanderson
77797741a5 Small updates to hyperdarts scenes 2019-09-18 15:37:46 -07:00
Hlaing Min
a19a6317ec Closes: #720
Fix to interpret subsequent points of absolute MoveTo (M) command as absolute LineTo (L).
2019-09-13 01:51:22 +08:00
Grant Sanderson
85e5b20ede Small tweak to patron scroll 2019-09-10 13:27:18 -07:00
Grant Sanderson
f34a110d5b More hyperdarts scenes 2019-09-10 13:26:40 -07:00
Grant Sanderson
f54b2ac81a Don't add sound while skipping animations 2019-09-10 13:26:30 -07:00
Grant Sanderson
afbdb94bb3 Set basic functionality to show the hyperdarts game 2019-08-28 14:23:00 -07:00
Grant Sanderson
e85beb91dc Merge pull request #710 from 3b1b/windmill
Windmill
2019-08-27 19:07:23 -07:00
Grant Sanderson
2f2ef09c92 Merge branch 'master' of github.com:3b1b/manim into windmill 2019-08-27 19:05:27 -07:00
Grant Sanderson
a5641c8144 Changed EOC1 Thumbnail 2019-08-27 19:05:15 -07:00
Grant Sanderson
4391c9147b Tweaks to Fourier behavior 2019-08-27 19:05:05 -07:00
Grant Sanderson
308a3e23ad Retiring windmill project 2019-08-27 19:03:36 -07:00
Grant Sanderson
0ac7b420f2 End of windmill project 2019-08-27 19:02:04 -07:00
Alexander Vázquez
32abbb9371 Change way to remove sound_file_path 2019-08-20 01:34:13 -05:00
Devin Neal
b74e5ca254 Merge pull request #680 from xy-23/master
New Text Mobject
2019-08-16 00:58:58 -07:00
xy-23
9b3e60f5ce Update some Text Mobject changes 2019-08-16 15:53:36 +08:00
Devin Neal
f0cff687aa Merge pull request #663 from pranjaldhole/master
conda environment bug fix with pyreadline package, closes #662
2019-08-16 00:37:40 -07:00
Devin Neal
73fea6a197 Merge pull request #668 from jonatasscdc/patch-1
Update requirements.txt
2019-08-16 00:34:38 -07:00
Devin Neal
7e3dbf51fa Merge pull request #672 from omertuc/patch-1
Update requirements.txt to include pyreadline
2019-08-16 00:34:00 -07:00
xy-23
0983fa11be Update some Text Mobject changes 2019-08-12 14:40:42 +08:00
omertuc
d5dc0d4d5b Only install pyreadline on Windows
It's not required on Linux
2019-08-12 05:56:35 +03:00
xy-23
e9fa188d42 New Text Mobject 2019-08-12 09:35:05 +08:00
xy-23
fd3721e050 new Text mobject 2019-08-06 21:05:37 +08:00
omertuc
d61d540655 Update requirements.txt to include pyreadline
This solves #444
2019-08-06 08:19:46 +03:00
Devin Neal
e1c049bece Merge pull request #670 from 0xflotus/patch-1
fixed manim
2019-08-05 14:52:58 -07:00
0xflotus
e498077e6a fixed manim 2019-08-05 23:14:27 +02:00
xy-23
057a92f92c new Text mobject 2019-08-05 22:53:15 +08:00
jonatasscdc
cce2191eb6 Update requirements.txt
updated pycairo version for windows
2019-08-03 14:53:10 -03:00
Grant Sanderson
00b5aaeb26 Animations for windmill up to early draft publish 2019-08-01 10:40:44 -07:00
Pranjal Dhole
91580ed4a3 conda env bug fix- ffmpeg from conda 2019-08-01 17:04:29 +02:00
Pranjal Dhole
06f78bf28f conda environment bug fix with pyreadline package, closes #662 2019-08-01 15:43:30 +02:00
Grant Sanderson
502ad1a02a Further windmill animation, to the end of the problem solution 2019-07-30 16:37:21 -07:00
Devin Neal
49582c3591 Merge pull request #652 from xy-23/master
Fix tqdm display problem in windows
2019-07-29 16:53:17 -07:00
Grant Sanderson
f1413c7717 TryOutSimplestExamples for windmill 2019-07-29 09:54:11 -07:00
Grant Sanderson
55ece141e8 Up to IntroduceWindmill scene 2019-07-26 18:30:11 -07:00
xy-23
519f82f1e7 Fix tqdm display problem in windows 2019-07-26 16:45:52 +08:00
Devin Neal
930e059a16 Merge pull request #651 from xy-23/master
Add a feature
2019-07-26 00:10:22 -07:00
xy-23
82a1b05f28 Add a feature #650 2019-07-26 14:34:21 +08:00
Grant Sanderson
b467444ad3 Beginning of windmill project 2019-07-25 20:05:02 -07:00
Grant Sanderson
c7e6d9d474 Merge pull request #611 from 3b1b/diffyq
Diffyq
2019-07-24 20:38:48 -07:00
Grant Sanderson
d6876b995d tweaking some diffyq content 2019-07-24 20:37:07 -07:00
Grant Sanderson
61bb4944fa Remove borken save_as_gif lines 2019-07-24 20:36:44 -07:00
Devin Neal
9f761822e1 Merge pull request #648 from zavden/master
Fix the list of scenes.py
2019-07-24 16:10:05 -07:00
zavden
3cee3de94f Update extract_scene.py 2019-07-24 18:01:12 -05:00
Devin Neal
38432a73e7 Merge pull request #641 from AamodJ/master
Updated macOS installation
2019-07-20 14:14:00 -07:00
Xiao Young
71b71f2d65 Solution of text rendering problem (#628)
Prevent unwanted space added between TextMobjects
2019-07-20 14:13:23 -07:00
AamodJ
d400952acc Updated macOS installation 2019-07-20 00:49:08 +05:30
Devin Neal
43d28a8595 Merge pull request #632 from tcztzy/master
Arch Linux installation guild
2019-07-13 22:28:00 -07:00
Tang Ziya
17505673d6 remove redundant empty line 2019-07-14 13:11:02 +08:00
Tang Ziya
0fa3415cc0 Arch Linux installation section 2019-07-14 13:06:36 +08:00
Tang Ziya
b31a5fb421 Arch LInux installation guild
Related #629
2019-07-12 21:11:45 +08:00
Devin Neal
eb13def609 update numpy and scipy versions 2019-07-10 17:53:19 -07:00
Devin Neal
a721a19137 Merge pull request #630 from eitanlees/doc-link
DOC: update documentation link in readme
2019-07-10 14:11:19 -07:00
Eitan Lees
25a75f1876 DOC: update documentation link in readme 2019-07-10 13:20:06 -04:00
Devin Neal
b31a174ac6 Merge pull request #622 from npetrangelo/docs
Filled out making_a_scene in the docs
2019-07-07 22:42:08 -07:00
Nathan Petrangelo
612158277e Removed the joke 2019-07-08 01:33:07 -04:00
Nathan Petrangelo
c60dd05e33 Added one more sentence 2019-07-08 01:23:04 -04:00
Nathan Petrangelo
e5d7ebd978 Added code formatting 2019-07-08 01:18:10 -04:00
Nathan Petrangelo
0645bc6acc Filled out making_a_scene overview 2019-07-08 01:13:49 -04:00
Grant Sanderson
36be369901 Beginning diffyq part 5 2019-07-03 11:09:05 -07:00
Grant Sanderson
b3673e93d7 Final animations for Fourier montage video 2019-07-03 11:08:39 -07:00
Grant Sanderson
985ef4518f Bug fix 2019-07-03 11:07:55 -07:00
Grant Sanderson
096f033954 Moved VIDEO_DIR initializations to after MEDIA_DIR 2019-07-01 12:51:48 -07:00
Grant Sanderson
92f4c0c001 Merge branch 'master' of github.com:3b1b/manim into diffyq 2019-06-29 15:21:00 -07:00
Grant Sanderson
10f2c105b1 Final animations for Fourier video 2019-06-29 15:20:52 -07:00
Grant Sanderson
34e343ec66 Changed endscreen default columns 2019-06-29 15:20:00 -07:00
Grant Sanderson
aec56c63be Added LIGHT_PINK 2019-06-29 15:19:43 -07:00
Grant Sanderson
c6d6e500fb Latest scenes for Fourier series video 2019-06-25 09:03:55 -07:00
Grant Sanderson
a3c1640fb7 NumberLine.default_numbers_to_display was not showing topmost number it should have 2019-06-25 09:03:33 -07:00
Grant Sanderson
0a695dd442 Changed Arrow default 2019-06-25 09:02:56 -07:00
Grant Sanderson
64c960041b Latest scenes for Fourier series, up to SimpleComplexExponentExample 2019-06-23 16:26:28 -07:00
Grant Sanderson
f3048eb574 Fixed bug with Bubble 2019-06-23 16:26:05 -07:00
Grant Sanderson
48f38b8940 Line.put_start_and_end_on should return self 2019-06-23 16:25:48 -07:00
Grant Sanderson
a535c6917e Added p2n and n2p abreviations for ComplexPlane 2019-06-23 16:25:22 -07:00
Grant Sanderson
0432514ccf Up to ShowInfiniteSum in diffyq part 4 animations 2019-06-21 17:56:42 -07:00
Grant Sanderson
a9baae4e98 Fixed(?) eye-tracking for PiCreatureScene 2019-06-20 20:23:48 -07:00
Grant Sanderson
0e44abe741 Latest changes for animations of video 4 of diffyq series 2019-06-20 13:26:43 -07:00
Grant Sanderson
40e44e6dd7 Parametric surface should remember what function created it 2019-06-20 13:26:22 -07:00
Grant Sanderson
02413d165a Change ode -> diffyq in imports 2019-06-19 16:24:44 -07:00
456 changed files with 24482 additions and 264007 deletions

View File

@@ -1,14 +0,0 @@
### If this is a support request:
**Please attempt to solve the problem on your own before opening an issue.**
Between old issues, StackOverflow, and Google, you should be able to find
solutions to most of the common problems.
Include at least:
1. Steps to reproduce the issue (e.g. the command you ran)
2. The unexpected behavior that occurred (e.g. error messages or screenshots)
3. The environment (e.g. operating system and version of manim)
### If this is a feature request:
Include the motivation for making this change.

20
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,20 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
### Describe the bug
<!-- A clear and concise description of what the bug is. -->
**Code**:
<!-- The code you run which reflect the bug. -->
**Wrong display or Error traceback**:
<!-- the wrong display result of the code you run, or the error Traceback -->
### Additional context
<!-- Add any other context about the problem here. -->

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: true
contact_links:
- name: Ask A Question
url: https://github.com/3b1b/manim/discussions/categories/q-a
about: Please ask questions you encountered here.

View File

@@ -0,0 +1,23 @@
---
name: Error when using
about: The error you encountered while using manim
title: ''
labels: ''
assignees: ''
---
### Describe the error
<!-- A clear and concise description of what you want to make. -->
### Code and Error
**Code**:
<!-- The code you run -->
**Error**:
<!-- The error traceback you get when run your code -->
### Environment
**OS System**:
**manim version**: master <!-- make sure you are using the latest version of master branch -->
**python version**:

View File

@@ -1,9 +1,18 @@
Thanks for contributing to manim!
<!-- Thanks for contributing to manim!
Please ensure that your pull request works with the latest version of manim.
-->
**Please ensure that your pull request works with the latest version of manim.**
You should also include:
## Motivation
<!-- Outline your motivation: In what way do your changes improve the library? -->
1. The motivation for making this change (or link the relevant issues)
2. How you tested the new behavior (e.g. a minimal working example, before/after
screenshots, gifs, commands, etc.) This is rather informal at the moment, but
the goal is to show us how you know the pull request works as intended.
## Proposed changes
<!-- What you changed in those files -->
-
-
-
## Test
<!-- How do you test your changes -->
**Code**:
**Result**:

40
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
name: docs
on:
push:
paths:
- 'docs/**'
pull_request:
paths:
- 'docs/**'
jobs:
docs:
runs-on: ubuntu-latest
name: build up document and deploy
steps:
- name: Checkout
uses: actions/checkout@master
- name: Install sphinx and manim env
run: |
pip3 install --upgrade pip
sudo apt install python3-setuptools libpango1.0-dev
pip3 install -r docs/requirements.txt
pip3 install -r requirements.txt
- name: Build document with Sphinx
run: |
cd docs
export PATH="$PATH:/home/runner/.local/bin"
export SPHINXBUILD="python3 -m sphinx"
make html
- name: Deploy to GitHub pages
if: ${{ github.event_name == 'push' }}
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
ACCESS_TOKEN: ${{ secrets.DOC_DEPLOY_TOKEN }}
BRANCH: gh-pages
FOLDER: docs/build/html

37
.github/workflows/publish.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: Upload Python Package
on:
release:
types: [created]
jobs:
deploy:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: ["py37", "py38", "py39", "py310"]
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine build
- name: Build wheels
run: python setup.py bdist_wheel --python-tag ${{ matrix.python }}
- name: Upload wheels
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
twine upload dist/*

180
.gitignore vendored
View File

@@ -1,27 +1,155 @@
*.pyc
*.bak
.DS_Store
homeless.py
playground.py
cairo_test.py
mayavi_test.py
random_scenes/
files/
ben_playground.py
ben_cairo_test.py
.floo
.flooignore
.vscode
.vs
*.xml
*.iml
media
manim.sublime-project
manim.sublime-workspace
.eggs/
build/
dist/
manim.egg-info/
# Created by https://www.toptal.com/developers/gitignore/api/python
# Edit at https://www.toptal.com/developers/gitignore?templates=python
primes.py
/media_dir.txt
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
manimlib.egg-info/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
pytestdebug.log
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
doc/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
pyrightconfig.json
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
pythonenv*
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# profiling data
.prof
# End of https://www.toptal.com/developers/gitignore/api/python
# Custom exclusions:
.DS_Store
# For manim
/videos
/custom_config.yml
test.py
CLAUDE.md

View File

@@ -1,30 +0,0 @@
language: python
dist: xenial # required for Python 3.7 (travis-ci/travis-ci#9069)
python: "3.7"
cache: pip
addons:
apt:
packages:
- python3-sphinx
install:
- pip install --upgrade pip
- pip install -r requirements.txt
- pip install flake8
before_script:
# stop the build if there are Python syntax errors or undefined names
- flake8 manimlib/ --count --select=E9,F63,F72,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- flake8 manimlib/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
script:
- python setup.py test
- python setup.py bdist_wheel
after_success:
- test $TRAVIS_BRANCH = "master" && test $TRAVIS_PULL_REQUEST = "false" && travis/build_docs.sh
deploy:
provider: pypi
user: eulertour
on:
tags: true
password:
secure: j5M2hiJo9kDWJhl0/iSuIQmfd2G2O1Qoc455AkUPMCheAcALnX9xJgFsYBmqfgOXTCtUCQf52XGdOIG4o4s5TY340NZ9eLKI9cWae+sTeSrDCkdwChUilm3D0jQf1FWPUf9ywScwGi20m0sRtzxEJyTuX+JMFd7PIa8bFoDXWPtEjoFOOJrfBusMsANzrI+j+vIMdJ48lc1J8UsQdZapwusTrYU9s12JLhKBPLavmaDKf0HDAJdEhFQ9SaINdkiW/QY8qbfJ/MVu5jHai168zXjD/IaswxoKqCO1G+fWlOq3KwVhG7gI7rwhnnuF+wcA7yLAaMdo0CjO2V7z15S6cG721V2Il2IIh1jq0F8irSH1ZOLOkv/fFk9hkSUQyEU0i8k4m1wE9L47a6GP/66+b+gI91PGfxBOqq4gE/1BdZJqceh0qc13KpcehtYrQwR05bSw0Ye5OoTkqAnCeON0B0Ur4ejfHd3TzkjgB06fw76cZtjAK8f/YjB3KyNCvysOixgzE4tRxlY92yX/tAKZ3iX3yD0MjsinSfwo52N5sIEaCS/FmPRMhJOQBa6ftkfbcUNQBTG9G3b134XXF/LbC4vBloCaTm5VSXagta+oY3SFKQxPAZXx7X+wcFGjqxDjZXG1e66QnA2JJH4aBDsRfSXmUtD8MblwFYdcCJWz+Ck=

View File

@@ -1,19 +0,0 @@
FROM python:3.7
RUN apt-get update \
&& apt-get install -qqy --no-install-recommends \
apt-utils \
ffmpeg \
sox \
libcairo2-dev \
texlive \
texlive-fonts-extra \
texlive-latex-extra \
texlive-latex-recommended \
texlive-science \
tipa \
&& rm -rf /var/lib/apt/lists/*
COPY . /manim
RUN cd /manim \
&& python setup.py sdist \
&& python -m pip install dist/manimlib*
ENTRYPOINT ["/bin/bash"]

View File

@@ -1,11 +1,6 @@
All files of this project under the directories active_projects and old_projects
are copyright 3Blue1Brown LLC and used by permission for this project only.
Any other file of this project is available under the MIT license as follow:
MIT License
Copyright (c) 2018 3Blue1Brown LLC
Copyright (c) 2020-2023 3Blue1Brown LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

2
MANIFEST.in Normal file
View File

@@ -0,0 +1,2 @@
graft manimlib
recursive-exclude manimlib *.pyc *.DS_Store

182
README.md
View File

@@ -1,156 +1,124 @@
<img src="logo/cropped.png"/>
<p align="center">
<a href="https://github.com/3b1b/manim">
<img src="https://raw.githubusercontent.com/3b1b/manim/master/logo/cropped.png">
</a>
</p>
[![Build Status](https://travis-ci.org/3b1b/manim.svg?branch=master)](https://travis-ci.org/3b1b/manim)
[![Documentation](https://img.shields.io/badge/docs-EulerTour-blue.svg)](https://www.eulertour.com/learn/manim/)
[![pypi version](https://img.shields.io/pypi/v/manimgl?logo=pypi)](https://pypi.org/project/manimgl/)
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://choosealicense.com/licenses/mit/)
[![Manim Subreddit](https://img.shields.io/reddit/subreddit-subscribers/manim.svg?color=ff4301&label=reddit)](https://www.reddit.com/r/manim/)
[![Manim Discord](https://img.shields.io/discord/581738731934056449.svg?label=discord)](https://discord.gg/mMRrZQW)
[![Manim Subreddit](https://img.shields.io/reddit/subreddit-subscribers/manim.svg?color=ff4301&label=reddit&logo=reddit)](https://www.reddit.com/r/manim/)
[![Manim Discord](https://img.shields.io/discord/581738731934056449.svg?label=discord&logo=discord)](https://discord.com/invite/bYCyhM9Kz2)
[![docs](https://github.com/3b1b/manim/workflows/docs/badge.svg)](https://3b1b.github.io/manim/)
Manim is an animation engine for explanatory math videos. It's used to create precise animations programmatically, as seen in the videos at [3Blue1Brown](https://www.3blue1brown.com/).
Manim is an engine for precise programmatic animations, designed for creating explanatory math videos.
Note, there are two versions of manim. This repository began as a personal project by the author of [3Blue1Brown](https://www.3blue1brown.com/) for the purpose of animating those videos, with video-specific code available [here](https://github.com/3b1b/videos). In 2020 a group of developers forked it into what is now the [community edition](https://github.com/ManimCommunity/manim/), with a goal of being more stable, better tested, quicker to respond to community contributions, and all around friendlier to get started with. See [this page](https://docs.manim.community/en/stable/faq/installation.html#different-versions) for more details.
## Installation
Manim runs on python 3.7. You can install it from PyPI via pip
> [!Warning]
> **WARNING:** These instructions are for ManimGL _only_. Trying to use these instructions to install [Manim Community/manim](https://github.com/ManimCommunity/manim) or instructions there to install this version will cause problems. You should first decide which version you wish to install, then only follow the instructions for your desired version.
```sh
pip3 install manimlib
```
> [!Note]
> **Note**: To install manim directly through pip, please pay attention to the name of the installed package. This repository is ManimGL of 3b1b. The package name is `manimgl` instead of `manim` or `manimlib`. Please use `pip install manimgl` to install the version in this repository.
System requirements are [cairo](https://www.cairographics.org), [ffmpeg](https://www.ffmpeg.org), [sox](http://sox.sourceforge.net), [latex](https://www.latex-project.org) (optional, if you want to use LaTeX).
Manim runs on Python 3.7 or higher.
You can now use it via the `manim` command. For example:
System requirements are [FFmpeg](https://ffmpeg.org/), [OpenGL](https://www.opengl.org/) and [LaTeX](https://www.latex-project.org) (optional, if you want to use LaTeX).
For Linux, [Pango](https://pango.org) along with its development headers are required. See instruction [here](https://github.com/ManimCommunity/ManimPango#building).
```sh
manim my_project.py MyScene
```
For more options, take a look at the “Using manim“ sections further below.
### Directly
```sh
# Install manimgl
pip install manimgl
# Try it out
manimgl
```
For more options, take a look at the [Using manim](#using-manim) sections further below.
If you want to hack on manimlib itself, clone this repository and in that directory execute:
```sh
# Install python requirements
python3 -m pip install -r requirements.txt
# Install manimgl
pip install -e .
# Try it out
python3 ./manim.py example_scenes.py SquareToCircle -pl
manimgl example_scenes.py OpeningManimExample
# or
manim-render example_scenes.py OpeningManimExample
```
### Directly (Windows)
1. [Install FFmpeg](https://www.wikihow.com/Install-FFmpeg-on-Windows).
2. Install Cairo. Download the wheel from https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycairo. For most users, ``pycairo1.18.0cp37cp37mwin32.whl`` will do fine.
```sh
pip3 install C:\path\to\wheel\pycairo1.18.0cp37cp37mwin32.whl
```
3. Install a LaTeX distribution. [MiKTeX](https://miktex.org/download) is recommended.
4. [Install SoX](https://sourceforge.net/projects/sox/files/sox/).
5. Install the remaining Python packages. Make sure that ``pycairo==1.17.1`` is changed to ``pycairo==1.18.0`` in requirements.txt.
2. Install a LaTeX distribution. [MiKTeX](https://miktex.org/download) is recommended.
3. Install the remaining Python packages.
```sh
git clone https://github.com/3b1b/manim.git
cd manim
pip3 install -r requirements.txt
python3 manim.py example_scenes.py SquareToCircle -pl
pip install -e .
manimgl example_scenes.py OpeningManimExample
```
### Mac OSX
1. Install FFmpeg, LaTeX in terminal using homebrew.
```sh
brew install ffmpeg mactex
```
2. If you are using an ARM-based processor, install Cairo.
```sh
arch -arm64 brew install pkg-config cairo
```
3. Install latest version of manim using these command.
```sh
git clone https://github.com/3b1b/manim.git
cd manim
pip install -e .
manimgl example_scenes.py OpeningManimExample (make sure to add manimgl to path first.)
```
## Anaconda Install
* Install sox and latex as above.
* Create a conda environment using `conda env create -f environment.yml`
* **WINDOWS ONLY** Install `pyreadline` via `pip install pyreadline`.
1. Install LaTeX as above.
2. Create a conda environment using `conda create -n manim python=3.8`.
3. Activate the environment using `conda activate manim`.
4. Install manimgl using `pip install -e .`.
### Using `virtualenv` and `virtualenvwrapper`
After installing `virtualenv` and `virtualenvwrapper`
```sh
git clone https://github.com/3b1b/manim.git
mkvirtualenv -a manim -r requirements.txt manim
python3 -m manim example_scenes.py SquareToCircle -pl
```
### Using Docker
Since it's a bit tricky to get all the dependencies set up just right, there is a Dockerfile and Compose file provided in this repo as well as [a premade image on Docker Hub](https://hub.docker.com/r/eulertour/manim/tags/). The Dockerfile contains instructions on how to build a manim image, while the Compose file contains instructions on how to run the image.
The prebuilt container image has manin repository included.
`INPUT_PATH` is where the container looks for scene files. You must set the `INPUT_PATH`
environment variable to the absolute path containing your scene file and the
`OUTPUT_PATH` environment variable to the directory where you want media to be written.
1. [Install Docker](https://docs.docker.com)
2. [Install Docker Compose](https://docs.docker.com/compose/install/)
3. Render an animation
```sh
INPUT_PATH=/path/to/dir/containing/source/code \
OUTPUT_PATH=/path/to/output/ \
docker-compose run manim example_scenes.py SquareToCircle -l
```
The command needs to be run as root if your username is not in the docker group.
You can replace `example.scenes.py` with any relative path from your `INPUT_PATH`.
<img src=./manim_docker_diagram.png/>
After running the output will say files ready at `/tmp/output/`, which refers to path inside the container. Your OUTPUT_PATH is bind mounted to this `/tmp/output` so any changes made by the container to `/tmp/output` will be mirrored on your OUTPUT_PATH. `/media/` will be created in `OUTPUT_PATH`.
`-p` won't work as manim would look for video player in the container system, which it does not have.
The first time you execute the above command, Docker will pull the image from Docker Hub and cache it. Any subsequent runs until the image is evicted will use the cached image.
Note that the image doesn't have any development tools installed and can't preview animations. Its purpose is building and testing only.
## Using manim
Try running the following:
```sh
python3 -m manim example_scenes.py SquareToCircle -pl
manimgl example_scenes.py OpeningManimExample
```
The `-p` flag in the command above is for previewing, meaning the video file will automatically open when it is done rendering. The `-l` flag is for a faster rendering at a lower quality.
This should pop up a window playing a simple scene.
Some other useful flags include:
Look through the [example scenes](https://3b1b.github.io/manim/getting_started/example_scenes.html) to see examples of the library's syntax, animation types and object types. In the [3b1b/videos](https://github.com/3b1b/videos) repo, you can see all the code for 3blue1brown videos, though code from older videos may not be compatible with the most recent version of manim. The readme of that repo also outlines some details for how to set up a more interactive workflow, as shown in [this manim demo video](https://www.youtube.com/watch?v=rbu7Zu5X1zI) for example.
When running in the CLI, some useful flags include:
* `-w` to write the scene to a file
* `-o` to write the scene to a file and open the result
* `-s` to skip to the end and just show the final frame.
* `-so` will save the final frame to an image and show it
* `-n <number>` to skip ahead to the `n`'th animation of a scene.
* `-f` to show the file in finder (for OSX).
* `-f` to make the playback window fullscreen
Set `MEDIA_DIR` environment variable to specify where the image and animation files will be written.
Look through the `old_projects` folder to see the code for previous 3b1b videos. Note, however, that developments are often made to the library without considering backwards compatibility with those old projects. To run an old project with a guarantee that it will work, you will have to go back to the commit which completed that project.
While developing a scene, the `-sp` flags are helpful to just see what things look like at the end without having to generate the full animation. It can also be helpful to use the `-n` flag to skip over some number of animations.
Take a look at custom_config.yml for further configuration. To add your customization, you can either edit this file, or add another file by the same name "custom_config.yml" to whatever directory you are running manim from. For example [this is the one](https://github.com/3b1b/videos/blob/master/custom_config.yml) for 3blue1brown videos. There you can specify where videos should be output to, where manim should look for image files and sounds you want to read in, and other defaults regarding style and video quality.
### Documentation
Documentation is in progress at [manim.readthedocs.io](https://manim.readthedocs.io).
Documentation is in progress at [3b1b.github.io/manim](https://3b1b.github.io/manim/). And there is also a Chinese version maintained by [**@manim-kindergarten**](https://manim.org.cn): [docs.manim.org.cn](https://docs.manim.org.cn/) (in Chinese).
### Walkthrough
Todd Zimmerman put together a [tutorial](https://talkingphysics.wordpress.com/2019/01/08/getting-started-animating-with-manim-and-python-3-7/) on getting started with manim, which has been updated to run on python 3.7.
### Live Streaming
To live stream your animations, simply run manim with the `--livestream` option.
```sh
> python -m manim --livestream
Writing to media/videos/scene/scene/1080p30/LiveStreamTemp.mp4
Manim is now running in streaming mode. Stream animations by passing
them to manim.play(), e.g.
>>> c = Circle()
>>> manim.play(ShowCreation(c))
>>>
```
It is also possible to stream directly to Twitch. To do that simply pass
--livestream and --to-twitch to manim and specify the stream key with
--with-key. Then when you follow the above example the stream will directly
start on your Twitch channel (with no audio support).
[manim-kindergarten](https://github.com/manim-kindergarten/) wrote and collected some useful extra classes and some codes of videos in [manim_sandbox repo](https://github.com/manim-kindergarten/manim_sandbox).
## Contributing
Is always welcome. In particular, there is a dire need for tests and documentation.
Is always welcome. As mentioned above, the [community edition](https://github.com/ManimCommunity/manim) has the most active ecosystem for contributions, with testing and continuous integration, but pull requests are welcome here too. Please explain the motivation for a given change and examples of its effect.
## License
All files in the directories active_projects and old_projects, which by and large generate the visuals for 3b1b videos, are copyright 3Blue1Brown.
The general purpose animation code found in the remainder of the repository, on the other hand, is under the MIT license.
This project falls under the MIT license.

View File

@@ -1,77 +0,0 @@
from manimlib.imports import *
def get_factors(n):
return filter(
lambda k: (n % k) == 0,
range(1, n)
)
class AmicableNumbers(Scene):
CONFIG = {
"n1": 28,
"n2": 284,
"colors": [
BLUE_C,
BLUE_B,
BLUE_D,
GREY_BROWN,
GREEN_C,
GREEN_B,
GREEN_D,
GREY,
]
}
def construct(self):
self.show_n1()
self.show_n1_factors()
self.show_n1_factor_sum()
self.show_n2_factors()
self.show_n2_factor_sum()
def show_n1(self):
dots = VGroup(*[Dot() for x in range(self.n1)])
dots.set_color(BLUE)
dots.set_sheen(0.2, UL)
dots.arrange(RIGHT, buff=SMALL_BUFF)
dots.set_width(FRAME_WIDTH - 1)
rects = self.get_all_factor_rectangles(dots)
rects.rotate(90 * DEGREES)
rects.arrange(RIGHT, buff=MED_SMALL_BUFF, aligned_edge=DOWN)
for rect in rects:
rect.first_col.set_stroke(WHITE, 3)
rects.set_height(FRAME_HEIGHT - 1)
self.add(rects)
def show_n1_factors(self):
pass
def show_n1_factor_sum(self):
pass
def show_n2_factors(self):
pass
def show_n2_factor_sum(self):
pass
#
def show_factors(self, dot_group):
pass
def get_all_factor_rectangles(self, dot_group):
n = len(dot_group)
factors = get_factors(n)
colors = it.cycle(self.colors)
result = VGroup()
for k, color in zip(factors, colors):
group = dot_group.copy()
group.set_color(color)
group.arrange_in_grid(n_rows=k, buff=SMALL_BUFF)
group.first_col = group[::(n // k)]
result.add(group)
return result

View File

@@ -1,107 +0,0 @@
from active_projects.ode.part1.pendulum import *
from active_projects.ode.part1.staging import *
from active_projects.ode.part1.pi_scenes import *
from active_projects.ode.part1.phase_space import *
from active_projects.ode.part1.wordy_scenes import *
OUTPUT_DIRECTORY = "ode/part1"
SCENES_IN_ORDER = [
WhenChangeIsEasier,
VectorFieldTest,
IntroducePendulum,
MultiplePendulumsOverlayed,
PeriodFormula,
FormulasAreLies,
MediumAnglePendulum,
MediumHighAnglePendulum,
HighAnglePendulum,
LowAnglePendulum,
SomeOfYouWatching,
SmallAngleApproximationTex,
VeryLowAnglePendulum,
FormulasAreLies,
TourOfDifferentialEquations,
WherePendulumLeads,
LongDoublePendulum,
# FollowThisThread,
StrogatzQuote,
ShowHorizontalDashedLine,
RabbitFoxPopulations,
RabbitFoxEquation,
# Something...
ShowSimpleTrajectory,
SimpleProjectileEquation,
SimpleProjectileEquationVGraphFreedom,
ShowGravityAcceleration,
UniversalGravityLawSymbols,
ExampleTypicalODE,
AnalyzePendulumForce,
ShowSineValues,
BuildUpEquation,
AirResistanceBrace,
ShowDerivativeVideo,
SubtleAirCurrents,
SimpleDampenedPendulum,
DefineODE,
SecondOrderEquationExample,
ODEvsPDEinFrames,
ProveTeacherWrong,
SetAsideSeekingSolution,
#
WriteInRadians,
XEqLThetaToCorner,
ComingUp,
InputLabel,
SoWhatIsThetaThen,
ReallyHardToSolve,
ReasonForSolution,
PhysicistPhaseSpace,
GleickQuote,
SpectrumOfStartingStates,
WritePhaseFlow,
AskAboutStability,
LoveExample,
PassageOfTime,
LovePhaseSpace,
ComparePhysicsToLove,
FramesComparingPhysicsToLove,
SetupToTakingManyTinySteps,
ShowClutterPrevention,
# VisualizeHeightSlopeCurvature,
VisualizeStates,
ReferencePiCollisionStateSpaces,
IntroduceVectorField,
XComponentArrows,
BreakingSecondOrderIntoTwoFirstOrder,
ShowPendulumPhaseFlow,
ShowHighVelocityCase,
TweakMuInFormula,
TweakMuInVectorField,
FromODEToVectorField,
LorenzVectorField,
ThreeBodiesInSpace,
AltThreeBodiesInSpace,
TwoBodiesInSpace,
TwoBodiesWithZPart,
ThreeBodyTitle,
ThreeBodySymbols,
#
HighAmplitudePendulum,
WritePhaseSpace,
#
AskAboutActuallySolving,
WriteODESolvingCode,
TakeManyTinySteps,
ManyStepsFromDifferentStartingPoints,
InaccurateComputation,
HungerForExactness,
ShowRect,
ShowSquare,
JumpToThisPoint,
ThreeBodyEquation,
ItGetsWorse,
ChaosTitle,
RevisitQuote,
EndScreen,
Thumbnail,
]

View File

@@ -1,41 +0,0 @@
from active_projects.ode.part2.staging import *
from active_projects.ode.part2.fourier_series import *
from active_projects.ode.part2.heat_equation import *
from active_projects.ode.part2.pi_scenes import *
from active_projects.ode.part2.wordy_scenes import *
OUTPUT_DIRECTORY = "ode/part2"
SCENES_IN_ORDER = [
PartTwoOfTour,
HeatEquationIntroTitle,
BrownianMotion,
BlackScholes,
ContrastChapters1And2,
FourierSeriesIntro,
FourierSeriesIntroBackground20,
ExplainCircleAnimations,
# FourierSeriesIntroBackground4,
# FourierSeriesIntroBackground8,
# FourierSeriesIntroBackground12,
TwoDBodyWithManyTemperatures,
TwoDBodyWithManyTemperaturesGraph,
TwoDBodyWithManyTemperaturesContour,
BringTwoRodsTogether,
ShowEvolvingTempGraphWithArrows,
# TodaysTargetWrapper,
WriteHeatEquation,
ReactionsToInitialHeatEquation,
TalkThrough1DHeatGraph,
ShowCubeFormation,
CompareInputsOfGeneralCaseTo1D,
ContrastXChangesToTChanges,
ShowPartialDerivativeSymbols,
WriteHeatEquation,
ShowCurvatureToRateOfChangeIntuition,
ContrastPDEToODE,
TransitionToTempVsTime,
Show1DAnd3DEquations,
#
AskAboutWhereEquationComesFrom,
DiscreteSetup,
]

View File

@@ -1,70 +0,0 @@
from active_projects.ode.part3.staging import *
from active_projects.ode.part3.temperature_graphs import *
from active_projects.ode.part3.pi_creature_scenes import *
from active_projects.ode.part3.wordy_scenes import *
from active_projects.ode.part3.discrete_case import *
OUTPUT_DIRECTORY = "ode/part3"
SCENES_IN_ORDER = [
LastChapterWrapper,
ThreeConstraints,
OceanOfPossibilities,
ThreeMainObservations,
SimpleCosExpGraph,
AddMultipleSolutions,
FourierSeriesIllustraiton,
BreakDownAFunction,
SineCurveIsUnrealistic,
AnalyzeSineCurve,
EquationAboveSineAnalysis,
ExponentialDecay,
InvestmentGrowth,
GrowingPileOfMoney,
CarbonDecayCurve,
CarbonDecayingInMammoth,
SineWaveScaledByExp,
ShowSinExpDerivatives,
IfOnly,
BoundaryConditionInterlude,
BoundaryConditionReference,
GiantCross,
SimulateRealSineCurve,
DerivativesOfLinearFunction,
StraightLine3DGraph,
SimulateLinearGraph,
EmphasizeBoundaryPoints,
ShowNewRuleAtDiscreteBoundary,
DiscreteEvolutionPoint25,
DiscreteEvolutionPoint1,
FlatEdgesForDiscreteEvolution,
FlatEdgesForDiscreteEvolutionTinySteps,
FlatEdgesContinuousEvolution,
FlatAtBoundaryWords,
SlopeToHeatFlow,
CloserLookAtStraightLine,
WriteOutBoundaryCondition,
SoWeGotNowhere,
ManipulateSinExpSurface,
HeatEquationFrame,
ShowFreq1CosExpDecay,
ShowFreq2CosExpDecay,
ShowFreq4CosExpDecay,
CompareFreqDecays1to2,
CompareFreqDecays1to4,
CompareFreqDecays2to4,
ShowHarmonics,
ShowHarmonicSurfaces,
# SimpleCosExpGraph,
# AddMultipleSolutions,
# IveHeardOfThis,
# FourierSeriesOfLineIllustration,
# InFouriersShoes,
]
PART_4_SCENES = [
FourierSeriesIllustraiton,
FourierNameIntro,
CircleAnimationOfF,
]

View File

@@ -1,18 +0,0 @@
from active_projects.ode.part4.staging import *
from active_projects.ode.part4.fourier_series_scenes import *
from active_projects.ode.part4.pi_creature_scenes import *
OUTPUT_DIRECTORY = "ode/part4"
SCENES_IN_ORDER = [
ComplexFourierSeriesExample,
ComplexFourierSeriesExampleEnd,
FourierSeriesExampleWithRectForZoom,
ZoomedInFourierSeriesExample,
RelationToOtherVideos,
WhyWouldYouCare,
# Oldies
# FourierSeriesIllustraiton,
# FourierNameIntro,
# CircleAnimationOfF,
]

View File

@@ -1,40 +0,0 @@
#!/usr/bin/env python
from manimlib.imports import *
from active_projects.ode.part2.fourier_series import FourierOfName
name_color_pairs = [
]
circle_counts = [
# 10,
# 25,
100,
]
if __name__ == "__main__":
for name, color in name_color_pairs:
for n_circles in circle_counts:
try:
first_name = name.split(" ")[0]
scene = FourierOfName(
name_text=name,
name_color=color,
n_circles=n_circles,
file_writer_config={
"write_to_movie": True,
"output_directory": os.path.join(
"patron_fourier_names",
first_name,
),
"file_name": "{}_Fouierified_{}_Separate_paths".format(
first_name,
n_circles
),
},
camera_config={
"frame_rate": 24,
},
)
except:
pass

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,515 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part1.shared_constructs import *
class SomeOfYouWatching(TeacherStudentsScene):
CONFIG = {
"camera_config": {
"background_color": DARKER_GREY,
}
}
def construct(self):
screen = self.screen
screen.scale(1.25, about_edge=UL)
screen.set_fill(BLACK, 1)
self.add(screen)
self.teacher.change("raise_right_hand")
for student in self.students:
student.change("pondering", screen)
self.student_says(
"Well...yeah",
target_mode="tease"
)
self.wait(3)
class FormulasAreLies(PiCreatureScene):
def construct(self):
you = self.pi_creature
t2c = {
"{L}": BLUE,
"{g}": YELLOW,
"\\theta_0": WHITE,
"\\sqrt{\\,": WHITE,
}
kwargs = {"tex_to_color_map": t2c}
period_eq = TexMobject(
"\\text{Period} = 2\\pi \\sqrt{\\,{L} / {g}}",
**kwargs
)
theta_eq = TexMobject(
"\\theta(t) = \\theta_0 \\cos\\left("
"\\sqrt{\\,{L} / {g}} \\cdot t"
"\\right)",
**kwargs
)
equations = VGroup(theta_eq, period_eq)
equations.arrange(DOWN, buff=LARGE_BUFF)
for eq in period_eq, theta_eq:
i = eq.index_of_part_by_tex("\\sqrt")
eq.sqrt_part = eq[i:i + 4]
theta0 = theta_eq.get_part_by_tex("\\theta_0")
theta0_words = TextMobject("Starting angle")
theta0_words.next_to(theta0, UL)
theta0_words.shift(UP + 0.5 * RIGHT)
arrow = Arrow(
theta0_words.get_bottom(),
theta0,
color=WHITE,
tip_length=0.25,
)
bubble = SpeechBubble()
bubble.pin_to(you)
bubble.write("Lies!")
bubble.content.scale(2)
bubble.resize_to_content()
self.add(period_eq)
you.change("pondering", period_eq)
self.wait()
theta_eq.remove(*theta_eq.sqrt_part)
self.play(
TransformFromCopy(
period_eq.sqrt_part,
theta_eq.sqrt_part,
),
FadeIn(theta_eq)
)
theta_eq.add(*theta_eq.sqrt_part)
self.play(
FadeInFrom(theta0_words, LEFT),
GrowArrow(arrow),
)
self.wait()
self.play(you.change, "confused")
self.wait()
self.play(
you.change, "angry",
ShowCreation(bubble),
FadeInFromPoint(bubble.content, you.mouth),
equations.to_edge, LEFT,
FadeOut(arrow),
FadeOut(theta0_words),
)
self.wait()
def create_pi_creature(self):
return You().flip().to_corner(DR)
# class TourOfDifferentialEquations(Scene):
# def construct(self):
# pass
class SoWhatIsThetaThen(TeacherStudentsScene):
def construct(self):
ode = get_ode()
ode.to_corner(UL)
self.add(ode)
self.student_says(
"Okay, but then\\\\"
"what \\emph{is} $\\theta(t)$?"
)
self.wait()
self.play(self.teacher.change, "happy")
self.wait(2)
self.teacher_says(
"First, you must appreciate\\\\"
"a deep truth...",
added_anims=[self.get_student_changes(
*3 * ["confused"]
)]
)
self.wait(4)
class ProveTeacherWrong(TeacherStudentsScene):
def construct(self):
tex_config = {
"tex_to_color_map": {
"{\\theta}": BLUE,
"{\\dot\\theta}": YELLOW,
"{\\ddot\\theta}": RED,
}
}
func = TexMobject(
"{\\theta}(t)", "=",
"\\theta_0", "\\cos(\\sqrt{g / L} \\cdot t)",
**tex_config,
)
d_func = TexMobject(
"{\\dot\\theta}(t)", "=",
"-\\left(\\sqrt{g / L}\\right)",
"\\theta_0", "\\sin(\\sqrt{g / L} \\cdot t)",
**tex_config,
)
dd_func = TexMobject(
"{\\ddot\\theta}(t)", "=",
"-\\left(g / L\\right)",
"\\theta_0", "\\cos(\\sqrt{g / L} \\cdot t)",
**tex_config,
)
# ode = TexMobject(
# "\\ddot {\\theta}({t})", "=",
# "-\\mu \\dot {\\theta}({t})",
# "-{g \\over L} \\sin\\big({\\theta}({t})\\big)",
# **tex_config,
# )
ode = get_ode()
arrows = [TexMobject("\\Downarrow") for x in range(2)]
VGroup(func, d_func, dd_func, ode, *arrows).scale(0.7)
teacher = self.teacher
you = self.students[2]
self.student_thinks(ode)
you.add_updater(lambda m: m.look_at(func))
self.teacher_holds_up(func)
self.wait()
group = VGroup(arrows[0], d_func, arrows[1], dd_func)
group.arrange(DOWN)
group.move_to(func, DOWN)
arrow = Arrow(
group.get_corner(UL),
ode.get_top(),
path_arc=PI / 2,
)
q_marks = VGroup(*[
TexMobject("?").scale(1.5).next_to(
arrow.point_from_proportion(a),
UP
)
for a in np.linspace(0.2, 0.8, 5)
])
cycle_animation(VFadeInThenOut(
q_marks,
lag_ratio=0.2,
run_time=4,
rate_func=squish_rate_func(smooth, 0, 0.5)
))
self.play(
func.next_to, group, UP,
LaggedStartMap(
FadeInFrom, group,
lambda m: (m, UP)
),
teacher.change, "guilty",
you.change, "sassy",
)
rect = SurroundingRectangle(
VGroup(group, func)
)
dashed_rect = DashedVMobject(rect, num_dashes=75)
animated_rect = AnimatedBoundary(dashed_rect, cycle_rate=1)
self.wait()
self.add(animated_rect, q_marks)
self.play(
ShowCreation(arrow),
# FadeInFromDown(q_mark),
self.get_student_changes("confused", "confused")
)
self.wait(4)
self.change_student_modes(
*3 * ["pondering"],
self.teacher.change, "maybe"
)
self.wait(8)
class PhysicistPhaseSpace(PiCreatureScene):
def construct(self):
physy = self.pi_creature
name = TextMobject("Physicist")
name.scale(1.5)
name.to_corner(DL, buff=MED_SMALL_BUFF)
physy.next_to(name, UP, SMALL_BUFF)
VGroup(name, physy).shift_onto_screen()
axes = Axes(
x_min=-1,
x_max=10,
y_min=-1,
y_max=7,
)
axes.set_height(6)
axes.next_to(physy, RIGHT)
axes.to_edge(UP)
axes.set_stroke(width=1)
x_label = TextMobject("Position")
x_label.next_to(axes.x_axis.get_right(), UP)
y_label = TextMobject("Momentum")
y_label.next_to(axes.y_axis.get_top(), RIGHT)
title = TextMobject("Phase space")
title.scale(1.5)
title.set_color(YELLOW)
title.move_to(axes)
self.add(name, physy)
self.play(
physy.change, "angry",
Write(axes),
FadeInFromDown(title)
)
self.wait(2)
self.play(
GrowFromPoint(x_label, physy.get_corner(UR)),
physy.change, "raise_right_hand",
axes.x_axis.get_right()
)
self.play(
GrowFromPoint(y_label, physy.get_corner(UR)),
physy.look_at, axes.y_axis.get_top(),
)
self.wait(3)
def create_pi_creature(self):
return PiCreature(color=GREY).to_corner(DL)
class AskAboutActuallySolving(TeacherStudentsScene):
def construct(self):
ode = get_ode()
ode.to_corner(UL)
self.add(ode)
morty = self.teacher
self.student_says(
"Yeah yeah, but how do\\\\"
"you actually \\emph{solve} it?",
student_index=1,
target_mode="sassy",
added_anims=[morty.change, "thinking"],
)
self.change_student_modes(
"confused", "sassy", "confused",
look_at_arg=ode,
)
self.wait()
self.teacher_says(
"What do you mean\\\\ by ``solve''?",
target_mode="speaking",
added_anims=[self.get_student_changes(
*3 * ["erm"]
)]
)
self.play(self.students[1].change, "angry")
self.wait(3)
class HungerForExactness(TeacherStudentsScene):
def construct(self):
students = self.students
you = students[2]
teacher = self.teacher
ode = get_ode()
ode.to_corner(UL)
left_part = ode[:5]
friction_part = ode[5:11]
self.add(ode)
proposed_solution = TexMobject(
"\\theta_0\\cos((\\sqrt{g/L})t)e^{-\\mu t}"
)
proposed_solution.next_to(
you.get_corner(UL), UP, buff=0.7
)
proposed_solution_rect = SurroundingRectangle(
proposed_solution, buff=MED_SMALL_BUFF,
)
proposed_solution_rect.set_color(BLUE)
proposed_solution_rect.round_corners()
solution_p1 = TexMobject(
"""
\\theta(t) = 2\\text{am}\\left(
\\frac{\\sqrt{2g + Lc_1} (t + c_2)}{2\\sqrt{L}},
\\frac{4g}{2g + Lc_1}
\\right)
""",
)
solution_p1.to_corner(UL)
solution_p2 = TexMobject(
"c_1, c_2 = \\text{Constants depending on initial conditions}"
)
solution_p2.set_color(LIGHT_GREY)
solution_p2.scale(0.75)
solution_p3 = TexMobject(
"""
\\text{am}(u, k) =
\\int_0^u \\text{dn}(v, k)\\,dv
"""
)
solution_p3.name = TextMobject(
"(Jacobi amplitude function)"
)
solution_p4 = TexMobject(
"""
\\text{dn}(u, k) =
\\sqrt{1 - k^2 \\sin^2(\\phi)}
"""
)
solution_p4.name = TextMobject(
"(Jacobi elliptic function)"
)
solution_p5 = TextMobject("Where $\\phi$ satisfies")
solution_p6 = TexMobject(
"""
u = \\int_0^\\phi \\frac{dt}{\\sqrt{1 - k^2 \\sin^2(t)}}
"""
)
solution = VGroup(
solution_p1,
solution_p2,
solution_p3,
solution_p4,
solution_p5,
solution_p6,
)
solution.arrange(DOWN)
solution.scale(0.7)
solution.to_corner(UL, buff=MED_SMALL_BUFF)
solution.set_stroke(width=0, background=True)
solution.remove(solution_p2)
solution_p1.add(solution_p2)
solution.remove(solution_p5)
solution_p6.add(solution_p5)
for part in [solution_p3, solution_p4]:
part.name.scale(0.7 * 0.7)
part.name.set_color(LIGHT_GREY)
part.name.next_to(part, RIGHT)
part.add(part.name)
self.student_says(
"Right, but like,\\\\"
"what \\emph{is} $\\theta(t)$?",
target_mode="sassy",
added_anims=[teacher.change, "guilty"],
)
self.wait()
self.play(
FadeInFromDown(proposed_solution),
RemovePiCreatureBubble(
you,
target_mode="raise_left_hand",
look_at_arg=proposed_solution,
),
teacher.change, "pondering",
students[0].change, "pondering",
students[1].change, "hesitant",
)
self.play(ShowCreation(proposed_solution_rect))
self.play(
proposed_solution.shift, 3 * RIGHT,
proposed_solution_rect.shift, 3 * RIGHT,
you.change, "raise_right_hand", teacher.eyes,
)
self.wait(3)
self.play(
FadeOut(proposed_solution),
FadeOut(proposed_solution_rect),
ode.move_to, self.hold_up_spot, DOWN,
ode.shift, LEFT,
teacher.change, "raise_right_hand",
self.get_student_changes(*3 * ["pondering"])
)
self.wait()
ode.save_state()
self.play(
left_part.move_to, friction_part, RIGHT,
left_part.match_y, left_part,
friction_part.to_corner, DR,
friction_part.fade, 0.5,
)
self.wait()
modes = ["erm", "sad", "sad", "horrified"]
for part, mode in zip(solution, modes):
self.play(
FadeInFrom(part, UP),
self.get_student_changes(
*3 * [mode],
look_at_arg=part,
)
)
self.wait()
self.wait(3)
self.change_student_modes("tired", "sad", "concerned_musician")
self.wait(4)
self.look_at(solution)
self.wait(5)
self.play(
FadeOutAndShift(solution, 2 * LEFT),
Restore(ode),
self.get_student_changes(
"sick", "angry", "tired",
)
)
self.wait(3)
mystery = TexMobject(
"\\theta(t) = ???",
tex_to_color_map={"\\theta": BLUE},
)
mystery.scale(2)
mystery.to_edge(UP)
mystery.set_stroke(width=0, background=True)
mystery_boundary = AnimatedBoundary(
mystery, stroke_width=1
)
self.play(
FadeInFromDown(mystery),
self.teacher.change, "pondering"
)
self.add(mystery_boundary, mystery)
self.change_all_student_modes("sad")
self.look_at(mystery)
self.wait(5)
# Define
self.student_says(
"Let $\\text{P}(\\mu, g, L; t)$ be a\\\\"
"function satisfying this ODE.",
student_index=0,
target_mode="speaking",
added_anims=[
FadeOut(mystery),
FadeOut(mystery_boundary),
ode.to_corner, UR
]
)
self.change_student_modes(
"hooray", "sassy", "sassy",
look_at_arg=students[0].eyes.get_corner(UR),
)
self.wait(2)
class ItGetsWorse(TeacherStudentsScene):
def construct(self):
self.teacher_says("It gets\\\\worse")
self.change_student_modes(
"hesitant", "pleading", "erm"
)
self.wait(5)

View File

@@ -1,118 +0,0 @@
from manimlib.imports import *
Lg_formula_config = {
"tex_to_color_map": {
"\\theta_0": WHITE,
"{L}": BLUE,
"{g}": YELLOW,
},
}
class You(PiCreature):
CONFIG = {
"color": BLUE_C,
}
def get_ode():
tex_config = {
"tex_to_color_map": {
"{\\theta}": BLUE,
"{\\dot\\theta}": RED,
"{\\ddot\\theta}": YELLOW,
"{t}": WHITE,
"{\\mu}": WHITE,
}
}
ode = TexMobject(
"{\\ddot\\theta}({t})", "=",
"-{\\mu} {\\dot\\theta}({t})",
"-{g \\over L} \\sin\\big({\\theta}({t})\\big)",
**tex_config,
)
return ode
def get_period_formula():
return TexMobject(
"2\\pi", "\\sqrt{\\,", "L", "/", "g", "}",
tex_to_color_map={
"L": BLUE,
"g": YELLOW,
}
)
def pendulum_vector_field_func(point, mu=0.1, g=9.8, L=3):
theta, omega = point[:2]
return np.array([
omega,
-np.sqrt(g / L) * np.sin(theta) - mu * omega,
0,
])
def get_vector_symbol(*texs, **kwargs):
config = {
"include_background_rectangle": True,
"bracket_h_buff": SMALL_BUFF,
"bracket_v_buff": SMALL_BUFF,
"element_alignment_corner": ORIGIN,
}
config.update(kwargs)
array = [[tex] for tex in texs]
return Matrix(array, **config)
def get_heart_var(index):
heart = SuitSymbol("hearts")
if index == 1:
heart.set_color(BLUE_C)
elif index == 2:
heart.set_color(GREEN)
heart.set_height(0.7)
index = Integer(index)
index.move_to(heart.get_corner(DR))
heart.add(index)
return heart
def get_heart_var_deriv(index):
heart = get_heart_var(index)
filler_tex = "T"
deriv = TexMobject("{d", filler_tex, "\\over", "dt}")
deriv.scale(2)
filler = deriv.get_part_by_tex(filler_tex)
heart.match_height(filler)
heart.move_to(filler)
heart.scale(1.5, about_edge=UL)
deriv.remove(filler)
deriv.add(heart)
deriv.heart = heart
return deriv
def get_love_equation1():
equation = VGroup(
get_heart_var_deriv(1),
TexMobject("=").scale(2),
TexMobject("a").scale(2),
get_heart_var(2)
)
equation.arrange(RIGHT)
equation[-1].shift(SMALL_BUFF * DL)
return equation
def get_love_equation2():
equation = VGroup(
get_heart_var_deriv(2),
TexMobject("=").scale(2),
TexMobject("-b").scale(2),
get_heart_var(1),
)
equation.arrange(RIGHT)
equation[-1].shift(SMALL_BUFF * DL)
return equation

File diff suppressed because it is too large Load Diff

View File

@@ -1,855 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part1.shared_constructs import *
class SmallAngleApproximationTex(Scene):
def construct(self):
approx = TexMobject(
"\\sin", "(", "\\theta", ") \\approx \\theta",
tex_to_color_map={"\\theta": RED},
arg_separator="",
)
implies = TexMobject("\\Downarrow")
period = TexMobject(
"\\text{Period}", "\\approx",
"2\\pi \\sqrt{\\,{L} / {g}}",
**Lg_formula_config,
)
group = VGroup(approx, implies, period)
group.arrange(DOWN)
approx_brace = Brace(approx, UP, buff=SMALL_BUFF)
approx_words = TextMobject(
"For small $\\theta$",
tex_to_color_map={"$\\theta$": RED},
)
approx_words.scale(0.75)
approx_words.next_to(approx_brace, UP, SMALL_BUFF)
self.add(approx, approx_brace, approx_words)
self.play(
Write(implies),
FadeInFrom(period, LEFT)
)
self.wait()
class StrogatzQuote(Scene):
def construct(self):
quote = self.get_quote()
movers = VGroup(*quote[:-1].family_members_with_points())
for mover in movers:
mover.save_state()
disc = Circle(radius=0.05)
disc.set_stroke(width=0)
disc.set_fill(BLACK, 0)
disc.move_to(mover)
mover.become(disc)
self.play(
FadeInFrom(quote.author_part, LEFT),
LaggedStartMap(
# FadeInFromLarge,
# quote[:-1].family_members_with_points(),
Restore, movers,
lag_ratio=0.005,
run_time=2,
)
# FadeInFromDown(quote[:-1]),
# lag_ratio=0.01,
)
self.wait()
self.play(
Write(quote.law_part.copy().set_color(YELLOW)),
run_time=1,
)
self.wait()
self.play(
Write(quote.language_part.copy().set_color(BLUE)),
run_time=1.5,
)
self.wait(2)
def get_quote(self):
law_words = "laws of physics"
language_words = "language of differential equations"
author = "-Steven Strogatz"
quote = TextMobject(
"""
\\Large
``Since Newton, mankind has come to realize
that the laws of physics are always expressed
in the language of differential equations.''\\\\
""" + author,
alignment="",
arg_separator=" ",
substrings_to_isolate=[law_words, language_words, author]
)
quote.law_part = quote.get_part_by_tex(law_words)
quote.language_part = quote.get_part_by_tex(language_words)
quote.author_part = quote.get_part_by_tex(author)
quote.set_width(12)
quote.to_edge(UP)
quote[-2].shift(SMALL_BUFF * LEFT)
quote.author_part.shift(RIGHT + 0.5 * DOWN)
quote.author_part.scale(1.2, about_edge=UL)
return quote
class WriteInRadians(Scene):
def construct(self):
words = TextMobject("In radians")
words.set_color(YELLOW)
square = SurroundingRectangle(TexMobject("\\theta"))
square.next_to(words, UP)
self.play(ShowCreation(square))
self.play(Write(words), FadeOut(square))
self.wait()
class XEqLThetaToCorner(Scene):
def construct(self):
equation = TexMobject(
"x = L\\theta",
tex_to_color_map={
"x": GREEN,
"\\theta": BLUE,
}
)
equation.move_to(DOWN + 3 * RIGHT)
self.add(equation)
self.play(equation.to_corner, DL, {"buff": LARGE_BUFF})
self.wait()
class ComingUp(Scene):
CONFIG = {
"camera_config": {"background_color": DARKER_GREY}
}
def construct(self):
frame = ScreenRectangle(
stroke_width=0,
fill_color=BLACK,
fill_opacity=1,
height=6
)
title = TextMobject("Coming up")
title.scale(1.5)
title.to_edge(UP)
frame.next_to(title, DOWN)
animated_frame = AnimatedBoundary(frame)
self.add(frame, title, animated_frame)
self.wait(10)
class InputLabel(Scene):
def construct(self):
label = TextMobject("Input")
label.scale(1.25)
arrow = Vector(UP)
arrow.next_to(label, UP)
self.play(
FadeInFrom(label, UP),
GrowArrow(arrow)
)
self.wait()
class ReallyHardToSolve(Scene):
def construct(self):
words = TextMobject(
"They're", "really\\\\",
"freaking", "hard\\\\",
"to", "solve\\\\",
)
words.set_height(6)
self.wait()
for word in words:
wait_time = 0.05 * len(word)
self.add(word)
self.wait(wait_time)
self.wait()
class ReasonForSolution(Scene):
def construct(self):
# Words
eq_word = TextMobject("Differential\\\\Equation")
s_word = TextMobject("Solution")
u_word = TextMobject("Understanding")
c_word = TextMobject("Computation")
cu_group = VGroup(u_word, c_word)
cu_group.arrange(DOWN, buff=2)
group = VGroup(eq_word, s_word, cu_group)
group.arrange(RIGHT, buff=2)
# words = VGroup(eq_word, s_word, u_word, c_word)
# Arrows
arrows = VGroup(
Arrow(eq_word.get_right(), s_word.get_left()),
Arrow(s_word.get_right(), u_word.get_left()),
Arrow(s_word.get_right(), c_word.get_left()),
)
arrows.set_color(LIGHT_GREY)
new_arrows = VGroup(
Arrow(
eq_word.get_corner(UR),
u_word.get_left(),
path_arc=-60 * DEGREES,
),
Arrow(
eq_word.get_corner(DR),
c_word.get_left(),
path_arc=60 * DEGREES,
),
)
new_arrows.set_color(BLUE)
# Define first examples
t2c = {
"{x}": BLUE,
"{\\dot x}": RED,
}
equation = TexMobject(
"{\\dot x}(t) = k {x}(t)",
tex_to_color_map=t2c,
)
equation.next_to(eq_word, DOWN)
solution = TexMobject(
"{x}(t) = x_0 e^{kt}",
tex_to_color_map=t2c,
)
solution.next_to(s_word, DOWN, MED_LARGE_BUFF)
equation.align_to(solution, DOWN)
axes = Axes(
x_min=-1,
x_max=5.5,
y_min=-1,
y_max=4.5,
y_axis_config={"unit_size": 0.5}
)
axes.set_stroke(width=2)
graph_line = axes.get_graph(
lambda x: np.exp(0.4 * x)
)
graph_line.set_stroke(width=2)
graph = VGroup(axes, graph_line)
graph.scale(0.5)
graph.next_to(u_word, UP)
computation = TexMobject(
# "\\displaystyle "
"e^x = \\sum_{n=0}^\\infty "
"\\frac{x^n}{n!}"
)
computation.next_to(c_word, DOWN)
first_examples = VGroup(
equation, solution, graph, computation
)
# Second example
ode = get_ode()
ode.scale(0.75)
second_examples = VGroup(
ode,
TexMobject("???").set_color(LIGHT_GREY),
ScreenRectangle(
height=2,
stroke_width=1,
),
)
for fe, se in zip(first_examples, second_examples):
se.move_to(fe, DOWN)
ode.shift(2 * SMALL_BUFF * DOWN)
ode.add_to_back(BackgroundRectangle(ode[-4:]))
self.add(eq_word)
self.add(equation)
self.play(
FadeInFrom(s_word, LEFT),
GrowArrow(arrows[0]),
TransformFromCopy(equation, solution)
)
self.wait()
self.play(
FadeInFrom(c_word, UL),
GrowArrow(arrows[2]),
FadeInFrom(computation, UP)
)
self.wait()
self.play(
FadeInFrom(u_word, DL),
GrowArrow(arrows[1]),
FadeInFromDown(graph)
)
self.wait(2)
self.play(
FadeOut(first_examples),
FadeIn(second_examples[:2])
)
self.wait()
self.play(
arrows.fade, 0.75,
s_word.fade, 0.75,
second_examples[1].fade, 0.75,
ShowCreation(new_arrows[0]),
FadeIn(second_examples[2])
)
self.play(
ShowCreation(new_arrows[1]),
Animation(second_examples),
)
self.wait()
class WritePhaseSpace(Scene):
def construct(self):
word = TextMobject("Phase space")
word.scale(2)
word.shift(FRAME_WIDTH * LEFT / 4)
word.to_edge(UP)
word.add_background_rectangle()
lines = VGroup(*[
Line(v, 1.3 * v)
for v in compass_directions(50)
])
lines.replace(word, stretch=True)
lines.scale(1.5)
lines.set_stroke(YELLOW)
lines.shuffle()
self.add(word)
self.play(
ShowPassingFlashWithThinningStrokeWidth(
lines,
lag_ratio=0.002,
run_time=1.5,
time_width=0.9,
n_segments=5,
)
)
self.wait()
class GleickQuote(Scene):
def construct(self):
quote = TextMobject(
"``[Phase space is] one of the most\\\\",
"powerful inventions", "of modern science.''\\\\",
)
quote.power_part = quote.get_part_by_tex("power")
book = ImageMobject("ChaosBookCover")
book.set_height(5)
book.next_to(ORIGIN, LEFT)
book.to_edge(DOWN)
gleick = ImageMobject("JamesGleick")
gleick.set_height(5)
gleick.next_to(ORIGIN, RIGHT)
gleick.to_edge(DOWN)
quote.to_edge(UP)
self.play(
FadeInFrom(book, RIGHT),
FadeInFrom(gleick, LEFT),
)
self.wait()
self.play(Write(quote))
self.play(Write(
quote.power_part.copy().set_color(BLUE),
run_time=1
))
self.wait()
class WritePhaseFlow(Scene):
def construct(self):
words = TextMobject("Phase flow")
words.scale(2)
words.shift(FRAME_WIDTH * LEFT / 4)
words.to_edge(UP)
words.add_background_rectangle()
self.play(Write(words))
self.wait()
class ShowSineValues(Scene):
def construct(self):
angle_tracker = ValueTracker(60 * DEGREES)
get_angle = angle_tracker.get_value
formula = always_redraw(
lambda: self.get_sine_formula(get_angle())
)
self.add(formula)
self.play(
angle_tracker.set_value, 0,
run_time=3,
)
self.wait()
self.play(
angle_tracker.set_value, 90 * DEGREES,
run_time=3,
)
self.wait()
def get_sine_formula(self, angle):
sin, lp, rp = TexMobject(
"\\sin", "(", ") = "
)
input_part = Integer(
angle / DEGREES,
unit="^\\circ",
)
input_part.set_color(YELLOW)
output_part = DecimalNumber(
np.sin(input_part.get_value() * DEGREES),
num_decimal_places=3,
)
result = VGroup(
sin, lp, input_part, rp, output_part
)
result.arrange(RIGHT, buff=SMALL_BUFF)
sin.scale(1.1, about_edge=DOWN)
lp.align_to(rp, UP)
return result
class SetAsideSeekingSolution(Scene):
def construct(self):
ode = get_ode()
ode.to_edge(UP)
q1 = TextMobject("Find an exact solution")
q1.set_color(YELLOW)
q2 = TexMobject(
"\\text{What is }", "\\theta", "(t)",
"\\text{'s personality?}",
tex_to_color_map={"\\theta": BLUE},
arg_separator="",
)
theta = q2.get_part_by_tex("\\theta")
for q in q1, q2:
q.scale(1.5)
q.next_to(ode, DOWN, MED_LARGE_BUFF)
eyes = Eyes(theta, height=0.1)
self.add(ode)
self.add(q1)
self.wait()
self.play(
q1.scale, 0.3,
q1.to_corner, UR, MED_SMALL_BUFF,
)
self.play(FadeInFrom(q2, DOWN))
self.play(
eyes.blink,
rate_func=lambda t: smooth(1 - t),
)
self.play(eyes.look_at, q2.get_left())
self.play(eyes.look_at, q2.get_right())
self.play(
eyes.blink,
rate_func=squish_rate_func(there_and_back)
)
self.wait()
self.play(
eyes.change_mode, "confused",
eyes.look_at, ode.get_left(),
)
self.play(
eyes.blink,
rate_func=squish_rate_func(there_and_back)
)
class ThreeBodyTitle(Scene):
def construct(self):
title = TextMobject("Three body problem")
title.scale(1.5)
title.to_edge(UP)
self.add(title)
class ThreeBodySymbols(Scene):
def construct(self):
self.init_coord_groups()
self.introduce_coord_groups()
self.count_coords()
def init_coord_groups(self):
kwargs = {
"bracket_v_buff": 2 * SMALL_BUFF
}
positions = VGroup(*[
get_vector_symbol(*[
"{}_{}".format(s, i)
for s in "xyz"
], **kwargs)
for i in range(1, 4)
])
velocities = VGroup(*[
get_vector_symbol(*[
"p^{}_{}".format(s, i)
for s in "xyz"
], **kwargs)
for i in range(1, 4)
])
groups = VGroup(positions, velocities)
colors = [GREEN, RED, BLUE]
for group in groups:
for matrix in group:
matrix.coords = matrix.get_entries()
for coord, color in zip(matrix.coords, colors):
coord.set_color(color)
group.arrange(RIGHT)
groups.arrange(DOWN, buff=LARGE_BUFF)
groups.to_edge(LEFT)
self.coord_groups = groups
def introduce_coord_groups(self):
groups = self.coord_groups
x_group, p_group = groups
x_word = TextMobject("Positions")
p_word = TextMobject("Momenta")
words = VGroup(x_word, p_word)
for word, group in zip(words, groups):
word.next_to(group, UP)
rect_groups = VGroup()
for group in groups:
rect_group = VGroup(*[
SurroundingRectangle(
VGroup(*[
tm.coords[i]
for tm in group
]),
color=WHITE,
stroke_width=2,
)
for i in range(3)
])
rect_groups.add(rect_group)
self.play(
*[
LaggedStartMap(
FadeInFrom, group,
lambda m: (m, UP),
run_time=1,
)
for group in groups
],
*map(FadeInFromDown, words),
)
for rect_group in rect_groups:
self.play(
ShowCreationThenFadeOut(
rect_group,
lag_ratio=0.5,
)
)
self.wait()
def count_coords(self):
coord_copies = VGroup()
for group in self.coord_groups:
for tex_mob in group:
for coord in tex_mob.coords:
coord_copy = coord.copy()
coord_copy.set_stroke(
WHITE, 2, background=True
)
coord_copies.add(coord_copy)
count = Integer()
count_word = TextMobject("18", "degrees \\\\ of freedom")[1]
count_group = VGroup(count, count_word)
count_group.arrange(
RIGHT,
aligned_edge=DOWN,
)
count_group.scale(1.5)
count_group.next_to(
self.coord_groups, RIGHT,
aligned_edge=DOWN,
)
count.add_updater(
lambda m: m.set_value(len(coord_copies))
)
count.add_updater(
lambda m: m.next_to(count_word[0][0], LEFT, aligned_edge=DOWN)
)
self.add(count_group)
self.play(
# ChangeDecimalToValue(count, len(coord_copies)),
ShowIncreasingSubsets(coord_copies),
run_time=1.5,
rate_func=linear,
)
self.play(FadeOut(coord_copies))
class ThreeBodyEquation(Scene):
def construct(self):
x1 = "\\vec{\\textbf{x}}_1"
x2 = "\\vec{\\textbf{x}}_2"
x3 = "\\vec{\\textbf{x}}_3"
kw = {
"tex_to_color_map": {
x1: RED,
x2: GREEN,
x3: BLUE,
}
}
equations = VGroup(*[
TexMobject(
"{d^2", t1, "\\over dt^2}", "=",
"G", "\\left("
"{" + m2, "(", t2, "-", t1, ")"
"\\over"
"||", t2, "-", t1, "||^3}",
"+",
"{" + m3, "(", t3, "-", t1, ")"
"\\over"
"||", t3, "-", t1, "||^3}",
"\\right)",
**kw
)
for t1, t2, t3, m1, m2, m3 in [
(x1, x2, x3, "m_1", "m_2", "m_3"),
(x2, x3, x1, "m_2", "m_3", "m_1"),
(x3, x1, x2, "m_3", "m_1", "m_2"),
]
])
equations.arrange(DOWN, buff=LARGE_BUFF)
self.play(LaggedStartMap(
FadeInFrom, equations,
lambda m: (m, UP),
lag_ratio=0.2,
))
self.wait()
class JumpToThisPoint(Scene):
def construct(self):
dot = Dot(color=YELLOW)
dot.scale(0.5)
arrow = Vector(DR, color=WHITE)
arrow.next_to(dot, UL, SMALL_BUFF)
words = TextMobject(
"Jump directly to\\\\",
"this point?",
)
words.add_background_rectangle_to_submobjects()
words.next_to(arrow.get_start(), UP, SMALL_BUFF)
self.play(
FadeInFromLarge(dot, 20),
rate_func=rush_into,
)
self.play(
GrowArrow(arrow),
FadeInFromDown(words),
)
class ChaosTitle(Scene):
def construct(self):
title = TextMobject("Chaos theory")
title.scale(1.5)
title.to_edge(UP)
line = Line(LEFT, RIGHT)
line.set_width(FRAME_WIDTH - 1)
line.next_to(title, DOWN)
self.play(
Write(title),
ShowCreation(line),
)
self.wait()
class RevisitQuote(StrogatzQuote, PiCreatureScene):
def construct(self):
quote = self.get_quote()
quote.law_part.set_color(YELLOW)
quote.language_part.set_color(BLUE)
quote.set_stroke(BLACK, 6, background=True)
quote.scale(0.8, about_edge=UL)
new_langauge_part = TextMobject(
"\\Large Language of differential equations"
)
new_langauge_part.to_edge(UP)
new_langauge_part.match_style(quote.language_part)
randy = self.pi_creature
self.play(
FadeInFrom(quote[:-1], DOWN),
FadeInFrom(quote[-1:], LEFT),
randy.change, "raise_right_hand",
)
self.play(Blink(randy))
self.play(randy.change, "angry")
self.play(
Blink(randy),
VFadeOut(randy, run_time=3)
)
mover = VGroup(quote.language_part)
self.add(quote, mover)
self.play(
ReplacementTransform(
mover, new_langauge_part,
),
*[
FadeOut(part)
for part in quote
if part is not quote.language_part
],
run_time=2,
)
self.wait()
class EndScreen(PatreonEndScreen):
CONFIG = {
"specific_patrons": [
"Juan Benet",
"Vassili Philippov",
"Burt Humburg",
"Carlos Vergara Del Rio",
"Matt Russell",
"Scott Gray",
"soekul",
"Tihan Seale",
"Ali Yahya",
"dave nicponski",
"Evan Phillips",
"Graham",
"Joseph Kelly",
"Kaustuv DeBiswas",
"LambdaLabs",
"Lukas Biewald",
"Mike Coleman",
"Peter Mcinerney",
"Quantopian",
"Roy Larson",
"Scott Walter, Ph.D.",
"Yana Chernobilsky",
"Yu Jun",
"Jordan Scales",
"Lukas -krtek.net- Novy",
"John Shaughnessy",
"Britt Selvitelle",
"David Gow",
"J",
"Jonathan Wilson",
"Joseph John Cox",
"Magnus Dahlström",
"Randy C. Will",
"Ryan Atallah",
"Luc Ritchie",
"1stViewMaths",
"Adrian Robinson",
"Alexis Olson",
"Andreas Benjamin Brössel",
"Andrew Busey",
"Ankalagon",
"Antonio Juarez",
"Arjun Chakroborty",
"Art Ianuzzi",
"Awoo",
"Bernd Sing",
"Boris Veselinovich",
"Brian Staroselsky",
"Chad Hurst",
"Charles Southerland",
"Chris Connett",
"Christian Kaiser",
"Clark Gaebel",
"Cooper Jones",
"Danger Dai",
"Dave B",
"Dave Kester",
"David Clark",
"DeathByShrimp",
"Delton Ding",
"eaglle",
"emptymachine",
"Eric Younge",
"Eryq Ouithaqueue",
"Federico Lebron",
"Giovanni Filippi",
"Hal Hildebrand",
"Herman Dieset",
"Hitoshi Yamauchi",
"Isaac Jeffrey Lee",
"j eduardo perez",
"Jacob Magnuson",
"Jameel Syed",
"Jason Hise",
"Jeff Linse",
"Jeff Straathof",
"John Griffith",
"John Haley",
"John V Wertheim",
"Jonathan Eppele",
"Kai-Siang Ang",
"Kanan Gill",
"L0j1k",
"Lee Redden",
"Linh Tran",
"Ludwig Schubert",
"Magister Mugit",
"Mark B Bahu",
"Mark Heising",
"Martin Price",
"Mathias Jansson",
"Matt Langford",
"Matt Roveto",
"Matthew Cocke",
"Michael Faust",
"Michael Hardel",
"Mirik Gogri",
"Mustafa Mahdi",
"Márton Vaitkus",
"Nero Li",
"Nikita Lesnikov",
"Omar Zrien",
"Owen Campbell-Moore",
"Peter Ehrnstrom",
"RedAgent14",
"rehmi post",
"Richard Burgmann",
"Richard Comish",
"Ripta Pasay",
"Rish Kundalia",
"Robert Teed",
"Roobie",
"Ryan Williams",
"Samuel D. Judge",
"Solara570",
"Stevie Metke",
"Tal Einav",
"Ted Suzman",
"Valeriy Skobelev",
"Xavier Bernard",
"Yavor Ivanov",
"Yaw Etse",
"YinYangBalance.Asia",
"Zach Cardwell",
]
}

View File

@@ -1,898 +0,0 @@
from manimlib.imports import *
# import scipy
class FourierCirclesScene(Scene):
CONFIG = {
"n_vectors": 10,
"big_radius": 2,
"colors": [
BLUE_D,
BLUE_C,
BLUE_E,
GREY_BROWN,
],
"circle_style": {
"stroke_width": 2,
},
"vector_config": {
"buff": 0,
"max_tip_length_to_length_ratio": 0.35,
"tip_length": 0.15,
"max_stroke_width_to_length_ratio": 10,
"stroke_width": 2,
},
"circle_config": {
"stroke_width": 1,
},
"base_frequency": 1,
"slow_factor": 0.25,
"center_point": ORIGIN,
"parametric_function_step_size": 0.001,
}
def setup(self):
self.slow_factor_tracker = ValueTracker(
self.slow_factor
)
self.vector_clock = ValueTracker(0)
self.vector_clock.add_updater(
lambda m, dt: m.increment_value(
self.get_slow_factor() * dt
)
)
self.add(self.vector_clock)
def get_slow_factor(self):
return self.slow_factor_tracker.get_value()
def get_vector_time(self):
return self.vector_clock.get_value()
#
def get_freqs(self):
n = self.n_vectors
all_freqs = list(range(n // 2, -n // 2, -1))
all_freqs.sort(key=abs)
return all_freqs
def get_coefficients(self):
return [complex(0) for x in range(self.n_vectors)]
def get_color_iterator(self):
return it.cycle(self.colors)
def get_rotating_vectors(self, freqs=None, coefficients=None):
vectors = VGroup()
self.center_tracker = VectorizedPoint(self.center_point)
if freqs is None:
freqs = self.get_freqs()
if coefficients is None:
coefficients = self.get_coefficients()
last_vector = None
for freq, coefficient in zip(freqs, coefficients):
if last_vector:
center_func = last_vector.get_end
else:
center_func = self.center_tracker.get_location
vector = self.get_rotating_vector(
coefficient=coefficient,
freq=freq,
center_func=center_func,
)
vectors.add(vector)
last_vector = vector
return vectors
def get_rotating_vector(self, coefficient, freq, center_func):
vector = Vector(RIGHT, **self.vector_config)
vector.scale(abs(coefficient))
if abs(coefficient) == 0:
phase = 0
else:
phase = np.log(coefficient).imag
vector.rotate(phase, about_point=ORIGIN)
vector.freq = freq
vector.phase = phase
vector.coefficient = coefficient
vector.center_func = center_func
vector.add_updater(self.update_vector)
return vector
def update_vector(self, vector, dt):
time = self.get_vector_time()
vector.set_angle(
vector.phase + time * vector.freq * TAU
)
vector.shift(
vector.center_func() - vector.get_start()
)
return vector
def get_circles(self, vectors):
return VGroup(*[
self.get_circle(
vector,
color=color
)
for vector, color in zip(
vectors,
self.get_color_iterator()
)
])
def get_circle(self, vector, color=BLUE):
circle = Circle(color=color, **self.circle_config)
circle.center_func = vector.get_start
circle.radius_func = vector.get_length
circle.add_updater(self.update_circle)
return circle
def update_circle(self, circle):
circle.set_width(2 * circle.radius_func())
circle.move_to(circle.center_func())
return circle
def get_vector_sum_path(self, vectors, color=YELLOW):
coefs = [v.coefficient for v in vectors]
freqs = [v.freq for v in vectors]
center = vectors[0].get_start()
path = ParametricFunction(
lambda t: center + reduce(op.add, [
complex_to_R3(
coef * np.exp(TAU * 1j * freq * t)
)
for coef, freq in zip(coefs, freqs)
]),
t_min=0,
t_max=1,
color=color,
step_size=self.parametric_function_step_size,
)
return path
# TODO, this should be a general animated mobect
def get_drawn_path(self, vectors, stroke_width=2, **kwargs):
path = self.get_vector_sum_path(vectors, **kwargs)
broken_path = CurvesAsSubmobjects(path)
broken_path.curr_time = 0
def update_path(path, dt):
# alpha = path.curr_time * self.get_slow_factor()
alpha = self.get_vector_time()
n_curves = len(path)
for a, sp in zip(np.linspace(0, 1, n_curves), path):
b = alpha - a
if b < 0:
width = 0
else:
width = stroke_width * (1 - (b % 1))
sp.set_stroke(width=width)
path.curr_time += dt
return path
broken_path.set_color(YELLOW)
broken_path.add_updater(update_path)
return broken_path
def get_y_component_wave(self,
vectors,
left_x=1,
color=PINK,
n_copies=2,
right_shift_rate=5):
path = self.get_vector_sum_path(vectors)
wave = ParametricFunction(
lambda t: op.add(
right_shift_rate * t * LEFT,
path.function(t)[1] * UP
),
t_min=path.t_min,
t_max=path.t_max,
color=color,
)
wave_copies = VGroup(*[
wave.copy()
for x in range(n_copies)
])
wave_copies.arrange(RIGHT, buff=0)
top_point = wave_copies.get_top()
wave.creation = ShowCreation(
wave,
run_time=(1 / self.get_slow_factor()),
rate_func=linear,
)
cycle_animation(wave.creation)
wave.add_updater(lambda m: m.shift(
(m.get_left()[0] - left_x) * LEFT
))
def update_wave_copies(wcs):
index = int(
wave.creation.total_time * self.get_slow_factor()
)
wcs[:index].match_style(wave)
wcs[index:].set_stroke(width=0)
wcs.next_to(wave, RIGHT, buff=0)
wcs.align_to(top_point, UP)
wave_copies.add_updater(update_wave_copies)
return VGroup(wave, wave_copies)
def get_wave_y_line(self, vectors, wave):
return DashedLine(
vectors[-1].get_end(),
wave[0].get_end(),
stroke_width=1,
dash_length=DEFAULT_DASH_LENGTH * 0.5,
)
# Computing Fourier series
# i.e. where all the math happens
def get_coefficients_of_path(self, path, n_samples=10000, freqs=None):
if freqs is None:
freqs = self.get_freqs()
dt = 1 / n_samples
ts = np.arange(0, 1, dt)
samples = np.array([
path.point_from_proportion(t)
for t in ts
])
samples -= self.center_point
complex_samples = samples[:, 0] + 1j * samples[:, 1]
result = []
for freq in freqs:
riemann_sum = np.array([
np.exp(-TAU * 1j * freq * t) * cs
for t, cs in zip(ts, complex_samples)
]).sum() * dt
result.append(riemann_sum)
return result
class FourierSeriesIntroBackground4(FourierCirclesScene):
CONFIG = {
"n_vectors": 4,
"center_point": 4 * LEFT,
"run_time": 30,
"big_radius": 1.5,
}
def construct(self):
circles = self.get_circles()
path = self.get_drawn_path(circles)
wave = self.get_y_component_wave(circles)
h_line = always_redraw(
lambda: self.get_wave_y_line(circles, wave)
)
# Why?
circles.update(-1 / self.camera.frame_rate)
#
self.add(circles, path, wave, h_line)
self.wait(self.run_time)
def get_ks(self):
return np.arange(1, 2 * self.n_vectors + 1, 2)
def get_freqs(self):
return self.base_frequency * self.get_ks()
def get_coefficients(self):
return self.big_radius / self.get_ks()
class FourierSeriesIntroBackground8(FourierSeriesIntroBackground4):
CONFIG = {
"n_vectors": 8,
}
class FourierSeriesIntroBackground12(FourierSeriesIntroBackground4):
CONFIG = {
"n_vectors": 12,
}
class FourierSeriesIntroBackground20(FourierSeriesIntroBackground4):
CONFIG = {
"n_vectors": 20,
}
class FourierOfPiSymbol(FourierCirclesScene):
CONFIG = {
"n_vectors": 51,
"center_point": ORIGIN,
"slow_factor": 0.1,
"n_cycles": 1,
"tex": "\\pi",
"start_drawn": False,
"max_circle_stroke_width": 1,
}
def construct(self):
self.add_vectors_circles_path()
for n in range(self.n_cycles):
self.run_one_cycle()
def add_vectors_circles_path(self):
path = self.get_path()
coefs = self.get_coefficients_of_path(path)
vectors = self.get_rotating_vectors(coefficients=coefs)
circles = self.get_circles(vectors)
self.set_decreasing_stroke_widths(circles)
# approx_path = self.get_vector_sum_path(circles)
drawn_path = self.get_drawn_path(vectors)
if self.start_drawn:
self.vector_clock.increment_value(1)
self.add(path)
self.add(vectors)
self.add(circles)
self.add(drawn_path)
self.vectors = vectors
self.circles = circles
self.path = path
self.drawn_path = drawn_path
def run_one_cycle(self):
time = 1 / self.slow_factor
self.wait(time)
def set_decreasing_stroke_widths(self, circles):
mcsw = self.max_circle_stroke_width
for k, circle in zip(it.count(1), circles):
circle.set_stroke(width=max(
# mcsw / np.sqrt(k),
mcsw / k,
mcsw,
))
return circles
def get_path(self):
tex_mob = TexMobject(self.tex)
tex_mob.set_height(6)
path = tex_mob.family_members_with_points()[0]
path.set_fill(opacity=0)
path.set_stroke(WHITE, 1)
return path
class FourierOfName(FourierOfPiSymbol):
CONFIG = {
"n_vectors": 100,
"name_color": WHITE,
"name_text": "Abc",
"time_per_symbol": 5,
"slow_factor": 1 / 5,
}
def construct(self):
name = TextMobject(self.name_text)
max_width = FRAME_WIDTH - 2
max_height = FRAME_HEIGHT - 2
name.set_width(max_width)
if name.get_height() > max_height:
name.set_height(max_height)
circles = VGroup(VectorizedPoint())
for path in name.family_members_with_points():
for subpath in path.get_subpaths():
sp_mob = VMobject()
sp_mob.set_points(subpath)
coefs = self.get_coefficients_of_path(sp_mob)
new_circles = self.get_circles(
coefficients=coefs
)
self.set_decreasing_stroke_widths(new_circles)
drawn_path = self.get_drawn_path(new_circles)
drawn_path.clear_updaters()
drawn_path.set_stroke(self.name_color, 3)
new_circles.suspend_updating()
self.play(ReplacementTransform(circles, new_circles))
new_circles.resume_updating()
circles = new_circles
self.play(
ShowCreation(drawn_path),
rate_func=linear,
run_time=self.time_per_symbol
)
circles.suspend_updating()
self.play(FadeOut(circles))
self.wait(3)
class FourierOfPiSymbol5(FourierOfPiSymbol):
CONFIG = {
"n_vectors": 5,
"run_time": 10,
}
class FourierOfTrebleClef(FourierOfPiSymbol):
CONFIG = {
"n_vectors": 101,
"run_time": 10,
"start_drawn": True,
"file_name": "TrebleClef",
"height": 7.5,
}
def get_shape(self):
shape = SVGMobject(self.file_name)
return shape
def get_path(self):
shape = self.get_shape()
path = shape.family_members_with_points()[0]
path.set_height(self.height)
path.set_fill(opacity=0)
path.set_stroke(WHITE, 0)
return path
class FourierOfIP(FourierOfTrebleClef):
CONFIG = {
"file_name": "IP_logo2",
"height": 6,
"n_vectors": 100,
}
# def construct(self):
# path = self.get_path()
# self.add(path)
def get_shape(self):
shape = SVGMobject(self.file_name)
return shape
def get_path(self):
shape = self.get_shape()
path = shape.family_members_with_points()[0]
path.add_line_to(path.get_start())
# path.make_smooth()
path.set_height(self.height)
path.set_fill(opacity=0)
path.set_stroke(WHITE, 0)
return path
class FourierOfEighthNote(FourierOfTrebleClef):
CONFIG = {
"file_name": "EighthNote"
}
class FourierOfN(FourierOfTrebleClef):
CONFIG = {
"height": 6,
"n_vectors": 1000,
}
def get_shape(self):
return TexMobject("N")
class FourierNailAndGear(FourierOfTrebleClef):
CONFIG = {
"height": 6,
"n_vectors": 200,
"run_time": 100,
"slow_factor": 0.01,
"parametric_function_step_size": 0.0001,
"arrow_config": {
"tip_length": 0.1,
"stroke_width": 2,
}
}
def get_shape(self):
shape = SVGMobject("Nail_And_Gear")[1]
return shape
class FourierBatman(FourierOfTrebleClef):
CONFIG = {
"height": 4,
"n_vectors": 100,
"run_time": 10,
"arrow_config": {
"tip_length": 0.1,
"stroke_width": 2,
}
}
def get_shape(self):
shape = SVGMobject("BatmanLogo")[1]
return shape
class FourierHeart(FourierOfTrebleClef):
CONFIG = {
"height": 4,
"n_vectors": 100,
"run_time": 10,
"arrow_config": {
"tip_length": 0.1,
"stroke_width": 2,
}
}
def get_shape(self):
shape = SuitSymbol("hearts")
return shape
def get_drawn_path(self, *args, **kwargs):
kwargs["stroke_width"] = 5
path = super().get_drawn_path(*args, **kwargs)
path.set_color(PINK)
return path
class FourierNDQ(FourierOfTrebleClef):
CONFIG = {
"height": 4,
"n_vectors": 1000,
"run_time": 10,
"arrow_config": {
"tip_length": 0.1,
"stroke_width": 2,
}
}
def get_shape(self):
path = VMobject()
shape = TexMobject("NDQ")
for sp in shape.family_members_with_points():
path.append_points(sp.points)
return path
class FourierGoogleG(FourierOfTrebleClef):
CONFIG = {
"n_vectors": 10,
"height": 5,
"g_colors": [
"#4285F4",
"#DB4437",
"#F4B400",
"#0F9D58",
]
}
def get_shape(self):
g = SVGMobject("google_logo")[5]
g.center()
self.add(g)
return g
def get_drawn_path(self, *args, **kwargs):
kwargs["stroke_width"] = 7
path = super().get_drawn_path(*args, **kwargs)
blue, red, yellow, green = self.g_colors
path[:250].set_color(blue)
path[250:333].set_color(green)
path[333:370].set_color(yellow)
path[370:755].set_color(red)
path[755:780].set_color(yellow)
path[780:860].set_color(green)
path[860:].set_color(blue)
return path
class ExplainCircleAnimations(FourierCirclesScene):
CONFIG = {
"n_vectors": 100,
"center_point": 2 * DOWN,
"n_top_circles": 9,
"path_height": 3,
}
def construct(self):
self.add_path()
self.add_circles()
self.wait(8)
self.organize_circles_in_a_row()
self.show_frequencies()
self.show_examples_for_frequencies()
self.show_as_vectors()
self.show_vector_sum()
self.tweak_starting_vectors()
def add_path(self):
self.path = self.get_path()
self.add(self.path)
def add_circles(self):
coefs = self.get_coefficients_of_path(self.path)
self.circles = self.get_circles(coefficients=coefs)
self.add(self.circles)
self.drawn_path = self.get_drawn_path(self.circles)
self.add(self.drawn_path)
def organize_circles_in_a_row(self):
circles = self.circles
top_circles = circles[:self.n_top_circles].copy()
center_trackers = VGroup()
for circle in top_circles:
tracker = VectorizedPoint(circle.center_func())
circle.center_func = tracker.get_location
center_trackers.add(tracker)
tracker.freq = circle.freq
tracker.circle = circle
center_trackers.submobjects.sort(
key=lambda m: m.freq
)
center_trackers.generate_target()
right_buff = 1.45
center_trackers.target.arrange(RIGHT, buff=right_buff)
center_trackers.target.to_edge(UP, buff=1.25)
self.add(top_circles)
self.play(
MoveToTarget(center_trackers),
run_time=2
)
self.wait(4)
self.top_circles = top_circles
self.center_trackers = center_trackers
def show_frequencies(self):
center_trackers = self.center_trackers
freq_numbers = VGroup()
for ct in center_trackers:
number = Integer(ct.freq)
number.next_to(ct, DOWN, buff=1)
freq_numbers.add(number)
ct.circle.number = number
ld, rd = [
TexMobject("\\dots")
for x in range(2)
]
ld.next_to(freq_numbers, LEFT, MED_LARGE_BUFF)
rd.next_to(freq_numbers, RIGHT, MED_LARGE_BUFF)
freq_numbers.add_to_back(ld)
freq_numbers.add(rd)
freq_word = TextMobject("Frequencies")
freq_word.scale(1.5)
freq_word.set_color(YELLOW)
freq_word.next_to(freq_numbers, DOWN, MED_LARGE_BUFF)
self.play(
LaggedStartMap(
FadeInFromDown, freq_numbers
)
)
self.play(
Write(freq_word),
LaggedStartMap(
ShowCreationThenFadeAround, freq_numbers,
)
)
self.wait(2)
self.freq_numbers = freq_numbers
self.freq_word = freq_word
def show_examples_for_frequencies(self):
top_circles = self.top_circles
c1, c2, c3 = [
list(filter(
lambda c: c.freq == k,
top_circles
))[0]
for k in (1, 2, 3)
]
neg_circles = VGroup(*filter(
lambda c: c.freq < 0,
top_circles
))
for c in [c1, c2, c3, *neg_circles]:
c.rect = SurroundingRectangle(c)
self.play(
ShowCreation(c2.rect),
WiggleOutThenIn(c2.number),
)
self.wait(2)
self.play(
ReplacementTransform(c2.rect, c1.rect),
)
self.play(FadeOut(c1.rect))
self.wait()
self.play(
ShowCreation(c3.rect),
WiggleOutThenIn(c3.number),
)
self.play(
FadeOut(c3.rect),
)
self.wait(2)
self.play(
LaggedStart(*[
ShowCreationThenFadeOut(c.rect)
for c in neg_circles
])
)
self.wait(3)
self.play(FadeOut(self.freq_word))
def show_as_vectors(self):
top_circles = self.top_circles
top_vectors = self.get_rotating_vectors(top_circles)
top_vectors.set_color(WHITE)
original_circles = top_circles.copy()
self.play(
FadeIn(top_vectors),
top_circles.set_opacity, 0,
)
self.wait(3)
self.play(
top_circles.match_style, original_circles
)
self.remove(top_vectors)
self.top_vectors = top_vectors
def show_vector_sum(self):
trackers = self.center_trackers.copy()
trackers.sort(
submob_func=lambda t: abs(t.circle.freq - 0.1)
)
plane = self.plane = NumberPlane(
x_min=-3,
x_max=3,
y_min=-2,
y_max=2,
axis_config={
"stroke_color": LIGHT_GREY,
}
)
plane.set_stroke(width=1)
plane.fade(0.5)
plane.move_to(self.center_point)
self.play(
FadeOut(self.drawn_path),
FadeOut(self.circles),
self.slow_factor_tracker.set_value, 0.05,
)
self.add(plane, self.path)
self.play(FadeIn(plane))
new_circles = VGroup()
last_tracker = None
for tracker in trackers:
if last_tracker:
tracker.new_location_func = last_tracker.circle.get_start
else:
tracker.new_location_func = lambda: self.center_point
original_circle = tracker.circle
tracker.circle = original_circle.copy()
tracker.circle.center_func = tracker.get_location
new_circles.add(tracker.circle)
self.add(tracker, tracker.circle)
start_point = tracker.get_location()
self.play(
UpdateFromAlphaFunc(
tracker, lambda t, a: t.move_to(
interpolate(
start_point,
tracker.new_location_func(),
a,
)
),
run_time=2
)
)
tracker.add_updater(lambda t: t.move_to(
t.new_location_func()
))
self.wait(2)
last_tracker = tracker
self.wait(3)
self.clear()
self.slow_factor_tracker.set_value(0.1)
self.add(
self.top_circles,
self.freq_numbers,
self.path,
)
self.add_circles()
for tc in self.top_circles:
for c in self.circles:
if c.freq == tc.freq:
tc.rotate(
angle_of_vector(c.get_start() - c.get_center()) -
angle_of_vector(tc.get_start() - tc.get_center())
)
self.wait(10)
def tweak_starting_vectors(self):
top_circles = self.top_circles
circles = self.circles
path = self.path
drawn_path = self.drawn_path
new_path = self.get_new_path()
new_coefs = self.get_coefficients_of_path(new_path)
new_circles = self.get_circles(coefficients=new_coefs)
new_top_circles = VGroup()
new_top_vectors = VGroup()
for top_circle in top_circles:
for circle in new_circles:
if circle.freq == top_circle.freq:
new_top_circle = circle.copy()
new_top_circle.center_func = top_circle.get_center
new_top_vector = self.get_rotating_vector(
new_top_circle
)
new_top_circles.add(new_top_circle)
new_top_vectors.add(new_top_vector)
self.play(
self.slow_factor_tracker.set_value, 0,
FadeOut(drawn_path)
)
self.wait()
self.play(
ReplacementTransform(top_circles, new_top_circles),
ReplacementTransform(circles, new_circles),
FadeOut(path),
run_time=3,
)
new_drawn_path = self.get_drawn_path(
new_circles, stroke_width=4,
)
self.add(new_drawn_path)
self.slow_factor_tracker.set_value(0.1)
self.wait(20)
#
def configure_path(self, path):
path.set_stroke(WHITE, 1)
path.set_fill(BLACK, opacity=1)
path.set_height(self.path_height)
path.move_to(self.center_point)
return path
def get_path(self):
tex = TexMobject("f")
path = tex.family_members_with_points()[0]
self.configure_path(path)
return path
# return Square().set_height(3)
def get_new_path(self):
shape = SVGMobject("TrebleClef")
path = shape.family_members_with_points()[0]
self.configure_path(path)
path.scale(1.5, about_edge=DOWN)
return path

File diff suppressed because it is too large Load Diff

View File

@@ -1,142 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part2.wordy_scenes import WriteHeatEquationTemplate
class ReactionsToInitialHeatEquation(PiCreatureScene):
def construct(self):
randy = self.pi_creature
randy.set_color(BLUE_C)
randy.center()
point = VectorizedPoint().next_to(randy, UL, LARGE_BUFF)
randy.add_updater(lambda r: r.look_at(point))
self.play(randy.change, "horrified")
self.wait()
self.play(randy.change, "pondering")
self.wait()
self.play(
randy.change, "confused",
point.next_to, randy, UR, LARGE_BUFF,
)
self.wait(2)
self.play(
point.shift, 2 * DOWN,
randy.change, "horrified"
)
self.wait(4)
class ContrastPDEToODE(TeacherStudentsScene):
CONFIG = {
"random_seed": 2,
}
def construct(self):
student = self.students[2]
pde, ode = words = VGroup(*[
TextMobject(
text + "\\\\",
"Differential\\\\",
"Equation"
)
for text in ("Partial", "Ordinary")
])
pde[0].set_color(YELLOW)
ode[0].set_color(BLUE)
for word in words:
word.arrange(DOWN, aligned_edge=LEFT)
words.arrange(RIGHT, buff=LARGE_BUFF)
words.next_to(student.get_corner(UR), UP, MED_LARGE_BUFF)
words.shift(UR)
lt = TexMobject("<")
lt.scale(1.5)
lt.move_to(Line(pde.get_right(), ode.get_left()))
for pi in self.pi_creatures:
pi.add_updater(lambda p: p.look_at(pde))
self.play(
FadeInFromDown(VGroup(words, lt)),
student.change, "raise_right_hand",
)
self.play(
self.get_student_changes("pondering", "pondering", "hooray"),
self.teacher.change, "happy"
)
self.wait(3)
self.play(
Swap(ode, pde),
self.teacher.change, "raise_right_hand",
self.get_student_changes(
"erm", "sassy", "confused"
)
)
self.look_at(words)
self.change_student_modes(
"thinking", "thinking", "tease",
)
self.wait(3)
class AskAboutWhereEquationComesFrom(TeacherStudentsScene, WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d1_equation()
equation.move_to(self.hold_up_spot, DOWN)
self.play(
FadeInFromDown(equation),
self.teacher.change, "raise_right_hand"
)
self.student_says(
"Um...why?",
target_mode="sassy",
student_index=2,
bubble_kwargs={"direction": RIGHT},
)
self.change_student_modes(
"confused", "confused", "sassy",
)
self.wait()
self.play(
self.teacher.change, "pondering",
)
self.wait(2)
class AskWhyRewriteIt(TeacherStudentsScene):
def construct(self):
self.student_says(
"Why?", student_index=1,
bubble_kwargs={"height": 2, "width": 2},
)
self.students[1].bubble = None
self.teacher_says(
"One step closer\\\\to derivatives"
)
self.change_student_modes(
"thinking", "thinking", "thinking",
look_at_arg=4 * LEFT + 2 * UP
)
self.wait(2)
class ReferenceKhanVideo(TeacherStudentsScene):
def construct(self):
khan_logo = ImageMobject("KhanLogo")
khan_logo.set_height(1)
khan_logo.next_to(self.teacher, UP, buff=2)
khan_logo.shift(2 * LEFT)
self.play(
self.teacher.change, "raise_right_hand",
)
self.change_student_modes(
"thinking", "pondering", "thinking",
look_at_arg=self.screen
)
self.wait()
self.play(FadeInFromDown(khan_logo))
self.look_at(self.screen)
self.wait(15)

View File

@@ -1,35 +0,0 @@
from manimlib.imports import *
TIME_COLOR = YELLOW
X_COLOR = GREEN
def get_heat_equation():
pass
def temperature_to_color(temp, min_temp=-1, max_temp=1):
colors = [BLUE, TEAL, GREEN, YELLOW, "#ff0000"]
alpha = inverse_interpolate(min_temp, max_temp, temp)
index, sub_alpha = integer_interpolate(
0, len(colors) - 1, alpha
)
return interpolate_color(
colors[index], colors[index + 1], sub_alpha
)
def two_d_temp_func(x, y, t):
return np.sum([
c * np.sin(f * var) * np.exp(-(f**2) * t)
for c, f, var in [
(0.2, 1, x),
(0.3, 3, x),
(0.02, 5, x),
(0.01, 7, x),
(0.5, 2, y),
(0.1, 10, y),
(0.01, 20, y),
]
])

View File

@@ -1,794 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part1.staging import TourOfDifferentialEquations
class PartTwoOfTour(TourOfDifferentialEquations):
CONFIG = {
"zoomed_thumbnail_index": 1,
}
def construct(self):
self.add_title()
self.show_thumbnails()
self.zoom_in_to_one_thumbnail()
def zoom_in_to_one_thumbnail(self):
frame = self.camera_frame
thumbnails = self.thumbnails
ode = TextMobject("Ordinary\\\\", "Differential Equation")
pde = TextMobject("Partial\\\\", "Differential Equation")
for word, thumbnail, vect in zip([ode, pde], thumbnails, [DOWN, UP]):
word.match_width(thumbnail)
word.next_to(thumbnail, vect)
ode[0].set_color(BLUE)
pde[0].set_color(YELLOW)
self.add(ode)
frame.save_state()
self.play(
frame.replace,
thumbnails[0],
run_time=1,
)
self.play(
Restore(frame, run_time=3),
)
self.play(
TransformFromCopy(ode, pde),
)
self.play(
ApplyMethod(
frame.replace, thumbnails[1],
path_arc=(-30 * DEGREES),
run_time=3
),
)
self.wait()
class BrownianMotion(Scene):
CONFIG = {
"wait_time": 60,
"L": 3, # Box in [-L, L] x [-L, L]
"n_particles": 100,
"m1": 1,
"m2": 100,
"r1": 0.05,
"r2": 0.5,
"max_v": 5,
"random_seed": 2,
}
def construct(self):
self.add_title()
self.add_particles()
self.wait(self.wait_time)
def add_title(self):
square = Square(side_length=2 * self.L)
title = TextMobject("Brownian motion")
title.scale(1.5)
title.next_to(square, UP)
self.add(square)
self.add(title)
def add_particles(self):
m1 = self.m1
m2 = self.m2
r1 = self.r1
r2 = self.r2
L = self.L
max_v = self.max_v
n_particles = self.n_particles
lil_particles = VGroup(*[
self.get_particle(m1, r1, L, max_v)
for k in range(n_particles)
])
big_particle = self.get_particle(m2, r2, L=r2, max_v=0)
big_particle.set_fill(YELLOW, 1)
for p in lil_particles:
if self.are_colliding(p, big_particle):
lil_particles.remove(p)
all_particles = VGroup(big_particle, *lil_particles)
all_particles.add_updater(self.update_particles)
path = self.get_traced_path(big_particle)
self.add(all_particles)
self.add(path)
self.particles = all_particles
self.big_particle = big_particle
self.path = path
def get_particle(self, m, r, L, max_v):
dot = Dot(radius=r)
dot.set_fill(WHITE, 0.7)
dot.mass = m
dot.radius = r
dot.center = op.add(
np.random.uniform(-L + r, L - r) * RIGHT,
np.random.uniform(-L + r, L - r) * UP
)
dot.move_to(dot.center)
dot.velocity = rotate_vector(
np.random.uniform(0, max_v) * RIGHT,
np.random.uniform(0, TAU),
)
return dot
def are_colliding(self, p1, p2):
d = get_norm(p1.get_center() - p2.get_center())
return (d < p1.radius + p2.radius)
def get_traced_path(self, particle):
path = VMobject()
path.set_stroke(BLUE, 3)
path.start_new_path(particle.get_center())
buff = 0.02
def update_path(path):
new_point = particle.get_center()
if get_norm(new_point - path.get_last_point()) > buff:
path.add_line_to(new_point)
path.add_updater(update_path)
return path
def update_particles(self, particles, dt):
for p1 in particles:
p1.center += p1.velocity * dt
# Check particle collisions
buff = 0.01
for p2 in particles:
if p1 is p2:
continue
v = p2.center - p1.center
dist = get_norm(v)
r_sum = p1.radius + p2.radius
diff = dist - r_sum
if diff < 0:
unit_v = v / dist
p1.center += (diff - buff) * unit_v / 2
p2.center += -(diff - buff) * unit_v / 2
u1 = p1.velocity
u2 = p2.velocity
m1 = p1.mass
m2 = p2.mass
v1 = (
(m2 * (u2 - u1) + m1 * u1 + m2 * u2) /
(m1 + m2)
)
v2 = (
(m1 * (u1 - u2) + m1 * u1 + m2 * u2) /
(m1 + m2)
)
p1.velocity = v1
p2.velocity = v2
# Check edge collisions
r1 = p1.radius
c1 = p1.center
for i in [0, 1]:
if abs(c1[i]) + r1 > self.L:
c1[i] = np.sign(c1[i]) * (self.L - r1)
p1.velocity[i] *= -1 * op.mul(
np.sign(p1.velocity[i]),
np.sign(c1[i])
)
for p in particles:
p.move_to(p.center)
return particles
class AltBrownianMotion(BrownianMotion):
CONFIG = {
"wait_time": 20,
"n_particles": 100,
"m2": 10,
}
class BlackScholes(AltBrownianMotion):
def construct(self):
# For some reason I'm amused by the thought
# Of this graph perfectly matching the Brownian
# Motion y-coordiante
self.add_title()
self.add_particles()
self.particles.set_opacity(0)
self.remove(self.path)
self.add_graph()
self.wait(self.wait_time)
def add_title(self):
title = TextMobject("Black-Sholes equations")
title.scale(1.5)
title.next_to(2 * UP, UP)
equation = TexMobject(
"{\\partial V \\over \\partial t}", "+",
"\\frac{1}{2} \\sigma^2 S^2",
"{\\partial^2 V \\over \\partial S^2}", "+",
"rS", "{\\partial V \\over \\partial S}",
"-rV", "=", "0",
)
equation.scale(0.8)
equation.next_to(title, DOWN)
self.add(title)
self.add(equation)
self.title = title
self.equation = equation
def add_graph(self):
axes = Axes(
x_min=-1,
x_max=20,
y_min=0,
y_max=10,
number_line_config={
"unit_size": 0.5,
},
)
axes.set_height(4)
axes.move_to(DOWN)
def get_graph_point():
return axes.c2p(
self.get_time(),
5 + 2 * self.big_particle.get_center()[1]
)
graph = VMobject()
graph.match_style(self.path)
graph.start_new_path(get_graph_point())
graph.add_updater(
lambda g: g.add_line_to(get_graph_point())
)
self.add(axes)
self.add(graph)
class ContrastChapters1And2(Scene):
def construct(self):
c1_frame, c2_frame = frames = VGroup(*[
ScreenRectangle(height=3.5)
for x in range(2)
])
frames.arrange(RIGHT, buff=LARGE_BUFF)
c1_title, c2_title = titles = VGroup(
TextMobject("Chapter 1"),
TextMobject("Chapter 2"),
)
titles.scale(1.5)
ode, pde = des = VGroup(
TextMobject(
"Ordinary",
"Differential Equations\\\\",
"ODEs",
),
TextMobject(
"Partial",
"Differential Equations\\\\",
"PDEs",
),
)
ode[0].set_color(BLUE)
pde[0].set_color(YELLOW)
for de in des:
de[-1][0].match_color(de[0])
de[-1].scale(1.5, about_point=de.get_top())
for title, frame, de in zip(titles, frames, des):
title.next_to(frame, UP)
de.match_width(frame)
de.next_to(frame, DOWN)
lt = TexMobject("<")
lt.move_to(Line(ode.get_right(), pde.get_left()))
lt.scale(2, about_edge=UP)
c1_words = TextMobject(
"They're", "really\\\\", "{}",
"freaking", "hard\\\\",
"to", "solve\\\\",
)
c1_words.set_height(0.5 * c1_frame.get_height())
c1_words.move_to(c1_frame)
c2_words = TextMobject(
"They're", "really", "\\emph{really}\\\\",
"freaking", "hard\\\\",
"to", "solve\\\\",
)
c2_words.set_color_by_tex("\\emph", YELLOW)
c2_words.move_to(c2_frame)
edit_shift = MED_LARGE_BUFF * RIGHT
c2_edits = VGroup(
TextMobject("sometimes").next_to(
c2_words[1:3], UP,
aligned_edge=LEFT,
),
Line(
c2_words[1].get_left(),
c2_words[2].get_right(),
stroke_width=8,
),
TextMobject("not too").next_to(
c2_words[3], LEFT,
),
Line(
c2_words[3].get_left(),
c2_words[3].get_right(),
stroke_width=8,
),
)
c2_edits.set_color(RED)
c2_edits[2:].shift(edit_shift)
self.add(titles)
self.add(frames)
self.add(des)
self.wait()
self.play(LaggedStartMap(
FadeInFromDown, c1_words,
lag_ratio=0.1,
))
self.wait()
# self.play(FadeIn(ode))
self.play(
# TransformFromCopy(ode, pde),
TransformFromCopy(c1_words, c2_words),
Write(lt)
)
self.wait()
self.play(
Write(c2_edits[:2], run_time=1),
)
self.play(
c2_words[3:5].shift, edit_shift,
Write(c2_edits[2:]),
run_time=1,
)
self.wait()
class ShowCubeFormation(ThreeDScene):
CONFIG = {
"camera_config": {
"shading_factor": 1.0,
},
"color": False,
}
def construct(self):
light_source = self.camera.light_source
light_source.move_to(np.array([-6, -3, 6]))
cube = Cube(
side_length=4,
fill_color=GREY,
stroke_color=WHITE,
stroke_width=0.5,
)
cube.set_fill(opacity=1)
if self.color:
# cube[0].set_color(BLUE)
# cube[1].set_color(RED)
# for face in cube[2:]:
# face.set_color([BLUE, RED])
cube.color_using_background_image("VerticalTempGradient")
# light_source.next_to(cube, np.array([1, -1, 1]), buff=2)
cube_3d = cube.copy()
cube_2d = cube_3d.copy().stretch(0, 2)
cube_1d = cube_2d.copy().stretch(0, 1)
cube_0d = cube_1d.copy().stretch(0, 0)
cube.become(cube_0d)
self.set_camera_orientation(
phi=70 * DEGREES,
theta=-145 * DEGREES,
)
self.begin_ambient_camera_rotation(rate=0.05)
for target in [cube_1d, cube_2d, cube_3d]:
self.play(
Transform(cube, target, run_time=1.5)
)
self.wait(8)
class ShowCubeFormationWithColor(ShowCubeFormation):
CONFIG = {
"color": True,
}
class ShowRect(Scene):
CONFIG = {
"height": 1,
"width": 3,
}
def construct(self):
rect = Rectangle(
height=self.height,
width=self.width,
)
rect.set_color(YELLOW)
self.play(ShowCreationThenFadeOut(rect))
class ShowSquare(ShowRect):
CONFIG = {
"height": 1,
"width": 1,
}
class ShowHLine(Scene):
def construct(self):
line = Line(LEFT, RIGHT)
line.set_color(BLUE)
self.play(ShowCreationThenFadeOut(line))
class ShowCross(Scene):
def construct(self):
cross = Cross(Square())
cross.set_width(3)
cross.set_height(1, stretch=True)
self.play(ShowCreation(cross))
class TwoBodyEquations(Scene):
def construct(self):
kw = {
"tex_to_color_map": {
"x_1": LIGHT_GREY,
"y_1": LIGHT_GREY,
"x_2": BLUE,
"y_2": BLUE,
"=": WHITE,
}
}
equations = VGroup(
TexMobject(
"{d^2 x_1 \\over dt^2}",
"=",
"{x_2 - x_1 \\over m_1 \\left(",
"(x_2 - x_1)^2 + (y_2 - y_1)^2",
"\\right)^{3/2}",
**kw
),
TexMobject(
"{d^2 y_1 \\over dt^2}",
"=",
"{y_2 - y_1 \\over m_1 \\left(",
"(x_2 - x_1)^2 + (y_2 - y_1)^2",
"\\right)^{3/2}",
**kw
),
TexMobject(
"{d^2 x_2 \\over dt^2}",
"=",
"{x_1 - x_2 \\over m_2 \\left(",
"(x_2 - x_1)^2 + (y_2 - y_1)^2",
"\\right)^{3/2}",
**kw
),
TexMobject(
"{d^2 y_2 \\over dt^2}",
"=",
"{y_1 - y_2 \\over m_2 \\left(",
"(x_2 - x_1)^2 + (y_2 - y_1)^2",
"\\right)^{3/2}",
**kw
),
)
equations.arrange(DOWN, buff=LARGE_BUFF)
equations.set_height(6)
equations.to_edge(LEFT)
variables = VGroup()
lhss = VGroup()
rhss = VGroup()
for equation in equations:
variable = equation[1]
lhs = equation[:4]
rhs = equation[4:]
variables.add(variable)
lhss.add(lhs)
rhss.add(rhs)
lhss_copy = lhss.copy()
for variable, lhs in zip(variables, lhss):
variable.save_state()
variable.match_height(lhs)
variable.scale(0.7)
variable.move_to(lhs, LEFT)
self.play(LaggedStart(*[
FadeInFrom(v, RIGHT)
for v in variables
]))
self.wait()
self.play(
LaggedStartMap(Restore, variables),
FadeIn(
lhss_copy,
remover=True,
lag_ratio=0.1,
run_time=2,
)
)
self.add(lhss)
self.wait()
self.play(LaggedStartMap(
FadeIn, rhss
))
self.wait()
self.play(
LaggedStart(*[
ShowCreationThenFadeAround(lhs[:3])
for lhs in lhss
])
)
self.wait()
self.play(
LaggedStartMap(
ShowCreationThenFadeAround,
rhss,
)
)
self.wait()
class LaplacianIntuition(SpecialThreeDScene):
CONFIG = {
"three_d_axes_config": {
"x_min": -5,
"x_max": 5,
"y_min": -5,
"y_max": 5,
},
"surface_resolution": 32,
}
def construct(self):
axes = self.get_axes()
axes.scale(0.5, about_point=ORIGIN)
self.set_camera_to_default_position()
self.begin_ambient_camera_rotation()
def func(x, y):
return np.array([
x, y,
2.7 + 0.5 * (np.sin(x) + np.cos(y)) -
0.025 * (x**2 + y**2)
])
surface_config = {
"u_min": -5,
"u_max": 5,
"v_min": -5,
"v_max": 5,
"resolution": self.surface_resolution,
}
# plane = ParametricSurface(
# lambda u, v: np.array([u, v, 0]),
# **surface_config
# )
# plane.set_stroke(WHITE, width=0.1)
# plane.set_fill(WHITE, opacity=0.1)
plane = Square(
side_length=10,
stroke_width=0,
fill_color=WHITE,
fill_opacity=0.1,
)
plane.center()
plane.set_shade_in_3d(True)
surface = ParametricSurface(
func, **surface_config
)
surface.set_stroke(BLUE, width=0.1)
surface.set_fill(BLUE, opacity=0.25)
self.add(axes, plane, surface)
point = VectorizedPoint(np.array([2, -2, 0]))
dot = Dot()
dot.set_color(GREEN)
dot.add_updater(lambda d: d.move_to(point))
line = always_redraw(lambda: DashedLine(
point.get_location(),
func(*point.get_location()[:2]),
background_image_file="VerticalTempGradient",
))
circle = Circle(radius=0.25)
circle.set_color(YELLOW)
circle.insert_n_curves(20)
circle.add_updater(lambda m: m.move_to(point))
circle.set_shade_in_3d(True)
surface_circle = always_redraw(
lambda: circle.copy().apply_function(
lambda p: func(*p[:2])
).shift(
0.02 * IN
).color_using_background_image("VerticalTempGradient")
)
self.play(FadeInFromLarge(dot))
self.play(ShowCreation(line))
self.play(TransformFromCopy(dot, circle))
self.play(
Transform(
circle.copy(),
surface_circle.copy().clear_updaters(),
remover=True,
)
)
self.add(surface_circle)
self.wait()
for vect in [4 * LEFT, DOWN, 4 * RIGHT, UP]:
self.play(
point.shift, vect,
run_time=3,
)
class StrogatzMention(PiCreatureScene):
def construct(self):
self.show_book()
self.show_motives()
self.show_pages()
def show_book(self):
morty = self.pi_creature
book = ImageMobject("InfinitePowers")
book.set_height(5)
book.to_edge(LEFT)
steve = ImageMobject("Strogatz_by_bricks")
steve.set_height(5)
steve.to_edge(LEFT)
name = TextMobject("Steven Strogatz")
name.match_width(steve)
name.next_to(steve, DOWN)
self.think(
"Hmm...many good\\\\lessons here...",
run_time=1
)
self.wait()
self.play(FadeInFromDown(steve))
self.wait()
self.play(
FadeInFrom(book, DOWN),
steve.shift, 4 * RIGHT,
RemovePiCreatureBubble(
morty, target_mode="thinking"
)
)
self.wait(3)
self.play(
FadeOut(steve),
FadeOut(morty),
)
self.book = book
def show_motives(self):
motives = VGroup(
TextMobject("1) Scratch and itch"),
TextMobject("2) Make people love math"),
)
motives.scale(1.5)
motives.arrange(
DOWN, LARGE_BUFF,
aligned_edge=LEFT,
)
motives.move_to(
Line(
self.book.get_right(),
FRAME_WIDTH * RIGHT / 2
)
)
motives.to_edge(UP)
for motive in motives:
self.play(FadeInFromDown(motive))
self.wait(2)
self.play(FadeOut(motives))
def show_pages(self):
book = self.book
pages = Group(*[
ImageMobject("IP_Sample_Page{}".format(i))
for i in range(1, 4)
])
for page in pages:
page.match_height(book)
page.next_to(book, RIGHT)
last_page = VectorizedPoint()
for page in pages:
self.play(
FadeOut(last_page),
FadeIn(page)
)
self.wait()
last_page = page
self.play(FadeOut(last_page))
def create_pi_creature(self):
return Mortimer().to_corner(DR)
class Thumbnail(Scene):
def construct(self):
image = ImageMobject("HeatSurfaceExampleFlipped")
image.set_height(6.5)
image.to_edge(DOWN, buff=-SMALL_BUFF)
self.add(image)
equation = TexMobject(
"{\\partial {T} \\over \\partial {t}}", "=",
"\\alpha", "\\nabla^2 {T}",
tex_to_color_map={
"{t}": YELLOW,
"{T}": RED,
}
)
equation.scale(2)
equation.to_edge(UP)
self.add(equation)
Group(equation, image).shift(1.5 * RIGHT)
question = TextMobject("What is\\\\this?")
question.scale(2.5)
question.to_edge(LEFT)
arrow = Arrow(
question.get_top(),
equation.get_left(),
buff=0.5,
path_arc=-90 * DEGREES,
)
arrow.set_stroke(width=5)
self.add(question, arrow)
class ShowNewton(Scene):
def construct(self):
pass
class ShowCupOfWater(Scene):
def construct(self):
pass

View File

@@ -1,785 +0,0 @@
from manimlib.imports import *
class WriteHeatEquationTemplate(Scene):
CONFIG = {
"tex_mobject_config": {
"tex_to_color_map": {
"{T}": WHITE,
"{t}": YELLOW,
"{x}": GREEN,
"{y}": RED,
"{z}": BLUE,
"\\partial": WHITE,
"2": WHITE,
},
},
}
def get_d1_equation(self):
return TexMobject(
"{\\partial {T} \\over \\partial {t}}({x}, {t})", "=",
"\\alpha \\cdot",
"{\\partial^2 {T} \\over \\partial {x}^2} ({x}, {t})",
**self.tex_mobject_config
)
def get_d1_equation_without_inputs(self):
return TexMobject(
"{\\partial {T} \\over \\partial {t}}", "=",
"\\alpha \\cdot",
"{\\partial^2 {T} \\over \\partial {x}^2}",
**self.tex_mobject_config
)
def get_d3_equation(self):
return TexMobject(
"{\\partial {T} \\over \\partial {t}}", "=",
"\\alpha \\left(",
"{\\partial^2 {T} \\over \\partial {x}^2} + ",
"{\\partial^2 {T} \\over \\partial {y}^2} + ",
"{\\partial^2 {T} \\over \\partial {z}^2}",
"\\right)",
**self.tex_mobject_config
)
def get_general_equation(self):
return TexMobject(
"{\\partial {T} \\over \\partial {t}}", "=",
"\\alpha", "\\nabla^2 {T}",
**self.tex_mobject_config,
)
def get_d3_equation_with_inputs(self):
return TexMobject(
"{\\partial {T} \\over \\partial {t}}",
"({x}, {y}, {z}, {t})", "=",
"\\alpha \\left(",
"{\\partial^2 {T} \\over \\partial {x}^2}",
"({x}, {y}, {z}, {t}) + ",
"{\\partial^2 {T} \\over \\partial {y}^2}",
"({x}, {y}, {z}, {t}) + ",
"{\\partial^2 {T} \\over \\partial {z}^2}",
"({x}, {y}, {z}, {t})",
"\\right)",
**self.tex_mobject_config
)
def get_d1_words(self):
return TextMobject("Heat equation\\\\", "(1 dimension)")
def get_d3_words(self):
return TextMobject("Heat equation\\\\", "(3 dimensions)")
def get_d1_group(self):
group = VGroup(
self.get_d1_words(),
self.get_d1_equation(),
)
group.arrange(DOWN, buff=MED_LARGE_BUFF)
return group
def get_d3_group(self):
group = VGroup(
self.get_d3_words(),
self.get_d3_equation(),
)
group.arrange(DOWN, buff=MED_LARGE_BUFF)
return group
class HeatEquationIntroTitle(WriteHeatEquationTemplate):
def construct(self):
scale_factor = 1.25
title = TextMobject("The Heat Equation")
title.scale(scale_factor)
title.to_edge(UP)
equation = self.get_general_equation()
equation.scale(scale_factor)
equation.next_to(title, DOWN, MED_LARGE_BUFF)
equation.set_color_by_tex("{T}", RED)
self.play(
FadeInFrom(title, DOWN),
FadeInFrom(equation, UP),
)
self.wait()
class BringTogether(Scene):
def construct(self):
arrows = VGroup(Vector(2 * RIGHT), Vector(2 * LEFT))
arrows.arrange(RIGHT, buff=2)
words = TextMobject("Bring together")[0]
words.next_to(arrows, DOWN)
words.save_state()
words.space_out_submobjects(1.2)
self.play(
VFadeIn(words),
Restore(words),
arrows.arrange, RIGHT, {"buff": SMALL_BUFF},
VFadeIn(arrows),
)
self.play(FadeOut(words), FadeOut(arrows))
class FourierSeriesIntro(WriteHeatEquationTemplate):
def construct(self):
title_scale_value = 1.5
title = TextMobject(
"Fourier ", "Series",
)
title.scale(title_scale_value)
title.to_edge(UP)
title.generate_target()
details_coming = TextMobject("Details coming...")
details_coming.next_to(title.get_corner(DR), DOWN)
details_coming.set_color(LIGHT_GREY)
# physics = TextMobject("Physics")
heat = TextMobject("Heat")
heat.scale(title_scale_value)
physics = self.get_general_equation()
physics.set_color_by_tex("{T}", RED)
arrow1 = Arrow(LEFT, RIGHT)
arrow2 = Arrow(LEFT, RIGHT)
group = VGroup(
heat, arrow1, physics, arrow2, title.target
)
group.arrange(RIGHT)
# physics.align_to(title.target, UP)
group.to_edge(UP)
rot_square = Square()
rot_square.fade(1)
rot_square.add_updater(lambda m, dt: m.rotate(dt))
def update_heat_colors(heat):
colors = [YELLOW, RED]
vertices = rot_square.get_vertices()
letters = heat.family_members_with_points()
for letter, vertex in zip(letters, vertices):
alpha = (normalize(vertex)[0] + 1) / 2
i, sa = integer_interpolate(0, len(colors) - 1, alpha)
letter.set_color(interpolate_color(
colors[i], colors[i + 1], alpha,
))
heat.add_updater(update_heat_colors)
image = ImageMobject("Joseph Fourier")
image.set_height(5)
image.next_to(title, DOWN, LARGE_BUFF)
image.to_edge(LEFT)
name = TextMobject("Joseph", "Fourier")
name.next_to(image, DOWN)
bubble = ThoughtBubble(
height=2,
width=2.5,
direction=RIGHT,
)
bubble.set_fill(opacity=0)
bubble.set_stroke(WHITE)
bubble.set_stroke(BLACK, 5, background=True)
bubble.shift(heat.get_center() - bubble.get_bubble_center())
bubble[:-1].shift(LEFT + 0.2 * DOWN)
bubble[:-1].rotate(-20 * DEGREES)
for mob in bubble[:-1]:
mob.rotate(20 * DEGREES)
# self.play(FadeInFromDown(title))
self.add(title)
self.play(
FadeInFromDown(image),
TransformFromCopy(
title.get_part_by_tex("Fourier"),
name.get_part_by_tex("Fourier"),
path_arc=90 * DEGREES,
),
FadeIn(name.get_part_by_tex("Joseph")),
)
self.play(Write(details_coming, run_time=1))
self.play(LaggedStartMap(FadeOut, details_coming[0], run_time=1))
self.wait()
self.add(rot_square)
self.play(
FadeInFrom(physics, RIGHT),
GrowArrow(arrow2),
FadeInFrom(heat, RIGHT),
GrowArrow(arrow1),
MoveToTarget(title),
)
self.play(ShowCreation(bubble))
self.wait(10)
class CompareODEToPDE(Scene):
def construct(self):
pass
class TodaysTargetWrapper(Scene):
def construct(self):
pass
class TwoGraphTypeTitles(Scene):
def construct(self):
left_title = TextMobject(
"Represent time\\\\with actual time"
)
left_title.shift(FRAME_WIDTH * LEFT / 4)
right_title = TextMobject(
"Represent time\\\\with an axis"
)
right_title.shift(FRAME_WIDTH * RIGHT / 4)
titles = VGroup(left_title, right_title)
for title in titles:
title.scale(1.25)
title.to_edge(UP)
self.play(FadeInFromDown(right_title))
self.wait()
self.play(FadeInFromDown(left_title))
self.wait()
class ShowPartialDerivativeSymbols(Scene):
def construct(self):
t2c = {
"{x}": GREEN,
"{t}": YELLOW,
}
d_derivs, del_derivs = VGroup(*[
VGroup(*[
TexMobject(
"{" + sym, "T", "\\over", sym, var + "}",
"(", "{x}", ",", "{t}", ")",
).set_color_by_tex_to_color_map(t2c)
for var in ("{x}", "{t}")
])
for sym in ("d", "\\partial")
])
dTdx, dTdt = d_derivs
delTdelx, delTdelx = del_derivs
dels = VGroup(*it.chain(*[
del_deriv.get_parts_by_tex("\\partial")
for del_deriv in del_derivs
]))
dTdx.to_edge(UP)
self.play(FadeInFrom(dTdx, DOWN))
self.wait()
self.play(ShowCreationThenFadeAround(dTdx[3:5]))
self.play(ShowCreationThenFadeAround(dTdx[:2]))
self.wait()
dTdt.move_to(dTdx)
self.play(
dTdx.next_to, dTdt, RIGHT, {"buff": 1.5},
dTdx.set_opacity, 0.5,
FadeInFromDown(dTdt)
)
self.wait()
for m1, m2 in zip(d_derivs, del_derivs):
m2.move_to(m1)
pd_words = TextMobject("Partial derivatives")
pd_words.next_to(del_derivs, DOWN, MED_LARGE_BUFF)
self.play(
Write(pd_words),
dTdx.set_opacity, 1,
run_time=1,
)
self.wait()
self.play(
ReplacementTransform(d_derivs, del_derivs)
)
self.play(
LaggedStartMap(
ShowCreationThenFadeAround,
dels,
surrounding_rectangle_config={
"color": BLUE,
"buff": 0.5 * SMALL_BUFF,
"stroke_width": 2,
}
)
)
self.wait()
num_words = VGroup(*[
TextMobject(
"Change in $T$\\\\caused by {}",
"$\\partial$", "${}$".format(var),
arg_separator="",
).set_color_by_tex_to_color_map(t2c)
for var in ("{x}", "{t}")
])
num_words.scale(0.8)
for word, deriv in zip(num_words, del_derivs):
num = deriv[:2]
word.move_to(num, UP)
word.to_edge(UP, buff=MED_SMALL_BUFF)
deriv.rect = SurroundingRectangle(
num,
buff=SMALL_BUFF,
stroke_width=2,
color=word[-1].get_color(),
)
deriv.rect.mob = num
deriv.rect.add_updater(lambda r: r.move_to(r.mob))
self.play(
Write(num_words[1]),
VGroup(del_derivs, pd_words).shift, DOWN,
ShowCreation(del_derivs[1].rect),
)
self.play(
Write(num_words[0]),
ShowCreation(del_derivs[0].rect),
)
self.wait()
class WriteHeatEquation(WriteHeatEquationTemplate):
def construct(self):
title = TextMobject("The Heat Equation")
title.to_edge(UP)
equation = self.get_d1_equation()
equation.next_to(title, DOWN)
eq_i = equation.index_of_part_by_tex("=")
dt_part = equation[:eq_i]
dx_part = equation[eq_i + 3:]
dt_rect = SurroundingRectangle(dt_part)
dt_rect.set_stroke(YELLOW, 2)
dx_rect = SurroundingRectangle(dx_part)
dx_rect.set_stroke(GREEN, 2)
two_outlines = equation.get_parts_by_tex("2").copy()
two_outlines.set_stroke(YELLOW, 2)
two_outlines.set_fill(opacity=0)
to_be_explained = TextMobject(
"To be explained shortly..."
)
to_be_explained.scale(0.7)
to_be_explained.next_to(equation, RIGHT, MED_LARGE_BUFF)
to_be_explained.fade(1)
pde = TextMobject("Partial Differential Equation")
pde.move_to(title)
del_outlines = equation.get_parts_by_tex("\\partial").copy()
del_outlines.set_stroke(YELLOW, 2)
del_outlines.set_fill(opacity=0)
self.play(
FadeInFrom(title, 0.5 * DOWN),
FadeInFrom(equation, 0.5 * UP),
)
self.wait()
self.play(ShowCreation(dt_rect))
self.wait()
self.play(TransformFromCopy(dt_rect, dx_rect))
self.play(ShowCreationThenDestruction(two_outlines))
self.wait()
self.play(Write(to_be_explained, run_time=1))
self.wait(2)
self.play(
ShowCreationThenDestruction(
del_outlines,
lag_ratio=0.1,
)
)
self.play(
FadeOutAndShift(title, UP),
FadeInFrom(pde, DOWN),
FadeOut(dt_rect),
FadeOut(dx_rect),
)
self.wait()
class Show3DEquation(WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d3_equation_with_inputs()
equation.set_width(FRAME_WIDTH - 1)
inputs = VGroup(*it.chain(*[
equation.get_parts_by_tex(s)
for s in ["{x}", "{y}", "{z}", "{t}"]
]))
inputs.sort()
equation.to_edge(UP)
self.add(equation)
self.play(LaggedStartMap(
ShowCreationThenFadeAround, inputs,
surrounding_rectangle_config={
"buff": 0.05,
"stroke_width": 2,
}
))
self.wait()
class Show1DAnd3DEquations(WriteHeatEquationTemplate):
def construct(self):
d1_group = self.get_d1_group()
d3_group = self.get_d3_group()
d1_words, d1_equation = d1_group
d3_words, d3_equation = d3_group
groups = VGroup(d1_group, d3_group)
for group in groups:
group.arrange(DOWN, buff=MED_LARGE_BUFF)
groups.arrange(RIGHT, buff=1.5)
groups.to_edge(UP)
d3_rhs = d3_equation[9:-2]
d3_brace = Brace(d3_rhs, DOWN)
nabla_words = TextMobject("Sometimes written as")
nabla_words.match_width(d3_brace)
nabla_words.next_to(d3_brace, DOWN)
nabla_exp = TexMobject(
"\\nabla^2 {T}",
**self.tex_mobject_config,
)
nabla_exp.next_to(nabla_words, DOWN)
# nabla_group = VGroup(nabla_words, nabla_exp)
d1_group.save_state()
d1_group.center().to_edge(UP)
self.play(
Write(d1_words),
FadeInFrom(d1_equation, UP),
run_time=1,
)
self.wait(2)
self.play(
Restore(d1_group),
FadeInFrom(d3_group, LEFT)
)
self.wait()
self.play(
GrowFromCenter(d3_brace),
Write(nabla_words),
TransformFromCopy(d3_rhs, nabla_exp),
run_time=1,
)
self.wait()
class D1EquationNoInputs(WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d1_equation_without_inputs()
equation.to_edge(UP)
# i1 = equation.index_of_part_by_tex("\\partial")
# i2 = equation.index_of_part_by_tex("\\cdot")
# equation[i1:i1 + 2].set_color(RED)
# equation[i2 + 1:i2 + 6].set_color(RED)
equation.set_color_by_tex("{T}", RED)
self.add(equation)
class AltHeatRHS(Scene):
def construct(self):
formula = TexMobject(
"{\\alpha \\over 2}", "\\Big(",
"T({x} - 1, {t}) + T({x} + 1, {t})"
"\\Big)",
tex_to_color_map={
"{x}": GREEN,
"{t}": YELLOW,
}
)
self.add(formula)
class CompareInputsOfGeneralCaseTo1D(WriteHeatEquation):
def construct(self):
three_d_expr, one_d_expr = [
TexMobject(
"{T}(" + inputs + ", {t})",
**self.tex_mobject_config,
)
for inputs in ["{x}, {y}, {z}", "{x}"]
]
for expr in three_d_expr, one_d_expr:
expr.scale(2)
expr.to_edge(UP)
x, y, z = [
three_d_expr.get_part_by_tex(letter)
for letter in ["x", "y", "z"]
]
self.play(FadeInFromDown(three_d_expr))
self.play(LaggedStartMap(
ShowCreationThenFadeAround,
VGroup(x, y, z)
))
self.wait()
low = 3
high = -3
self.play(
ReplacementTransform(three_d_expr[:low], one_d_expr[:low]),
ReplacementTransform(three_d_expr[high:], one_d_expr[high:]),
three_d_expr[low:high].scale, 0,
)
self.wait()
class ShowLaplacian(WriteHeatEquation):
def construct(self):
equation = self.get_d3_equation()
equation.to_edge(UP, buff=MED_SMALL_BUFF)
parts = VGroup()
plusses = VGroup()
for char in "xyz":
index = equation.index_of_part_by_tex(
"{" + char + "}"
)
part = equation[index - 6:index + 3]
rect = SurroundingRectangle(part)
rect.match_color(equation[index])
parts.add(part)
part.rect = rect
if char in "yz":
plus = equation[index - 8]
part.plus = plus
plusses.add(plus)
lp = equation.get_part_by_tex("(")
rp = equation.get_part_by_tex(")")
for part in parts:
part.rp = rp.copy()
part.rp.next_to(part, RIGHT, SMALL_BUFF)
part.rp.align_to(lp, UP)
rp.become(parts[0].rp)
# Show new second derivatives
self.add(*equation)
self.remove(*plusses, *parts[1], *parts[2])
for part in parts[1:]:
self.play(
rp.become, part.rp,
FadeInFrom(part, LEFT),
Write(part.plus),
ShowCreation(part.rect),
)
self.play(
FadeOut(part.rect),
)
self.wait()
# Show laplacian
brace = Brace(parts, DOWN)
laplacian = TexMobject("\\nabla^2", "T")
laplacian.next_to(brace, DOWN)
laplacian_name = TextMobject(
"``Laplacian''"
)
laplacian_name.next_to(laplacian, DOWN)
T_parts = VGroup(*[part[3] for part in parts])
non_T_parts = VGroup(*[
VGroup(*part[:3], *part[4:])
for part in parts
])
self.play(GrowFromCenter(brace))
self.play(Write(laplacian_name))
self.play(
TransformFromCopy(non_T_parts, laplacian[0])
)
self.play(
TransformFromCopy(T_parts, laplacian[1])
)
self.wait(3)
class AskAboutActuallySolving(WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d1_equation()
equation.center()
q1 = TextMobject("Solve for T?")
q1.next_to(equation, UP, LARGE_BUFF)
q2 = TextMobject("What does it \\emph{mean} to solve this?")
q2.next_to(equation, UP, LARGE_BUFF)
formula = TexMobject(
"T({x}, {t}) = \\sin\\big(a{x}\\big) e^{-\\alpha \\cdot a^2 {t}}",
tex_to_color_map={
"{x}": GREEN,
"{t}": YELLOW,
}
)
formula.next_to(equation, DOWN, LARGE_BUFF)
q3 = TextMobject("Is this it?")
arrow = Vector(LEFT, color=WHITE)
arrow.next_to(formula, RIGHT)
q3.next_to(arrow, RIGHT)
self.add(equation)
self.play(FadeInFromDown(q1))
self.wait()
self.play(
FadeInFromDown(q2),
q1.shift, 1.5 * UP,
)
self.play(FadeInFrom(formula, UP))
self.play(
GrowArrow(arrow),
FadeInFrom(q3, LEFT)
)
self.wait()
class PDEPatreonEndscreen(PatreonEndScreen):
CONFIG = {
"specific_patrons": [
"Juan Benet",
"Vassili Philippov",
"Burt Humburg",
"Matt Russell",
"Scott Gray",
"soekul",
"Tihan Seale",
"Richard Barthel",
"Ali Yahya",
"dave nicponski",
"Evan Phillips",
"Graham",
"Joseph Kelly",
"Kaustuv DeBiswas",
"LambdaLabs",
"Lukas Biewald",
"Mike Coleman",
"Peter Mcinerney",
"Quantopian",
"Roy Larson",
"Scott Walter, Ph.D.",
"Yana Chernobilsky",
"Yu Jun",
"Jordan Scales",
"D. Sivakumar",
"Lukas -krtek.net- Novy",
"John Shaughnessy",
"Britt Selvitelle",
"David Gow",
"J",
"Jonathan Wilson",
"Joseph John Cox",
"Magnus Dahlström",
"Randy C. Will",
"Ryan Atallah",
"Luc Ritchie",
"1stViewMaths",
"Adrian Robinson",
"Alexis Olson",
"Andreas Benjamin Brössel",
"Andrew Busey",
"Ankalagon",
"Antoine Bruguier",
"Antonio Juarez",
"Arjun Chakroborty",
"Art Ianuzzi",
"Awoo",
"Bernd Sing",
"Boris Veselinovich",
"Brian Staroselsky",
"Chad Hurst",
"Charles Southerland",
"Chris Connett",
"Christian Kaiser",
"Clark Gaebel",
"Cooper Jones",
"Danger Dai",
"Dave B",
"Dave Kester",
"David B. Hill",
"David Clark",
"DeathByShrimp",
"Delton Ding",
"eaglle",
"emptymachine",
"Eric Younge",
"Eryq Ouithaqueue",
"Federico Lebron",
"Giovanni Filippi",
"Hal Hildebrand",
"Hitoshi Yamauchi",
"Isaac Jeffrey Lee",
"j eduardo perez",
"Jacob Magnuson",
"Jameel Syed",
"Jason Hise",
"Jeff Linse",
"Jeff Straathof",
"John Griffith",
"John Haley",
"John V Wertheim",
"Jonathan Eppele",
"Kai-Siang Ang",
"Kanan Gill",
"L0j1k",
"Lee Beck",
"Lee Redden",
"Linh Tran",
"Ludwig Schubert",
"Magister Mugit",
"Mark B Bahu",
"Mark Heising",
"Martin Price",
"Mathias Jansson",
"Matt Langford",
"Matt Roveto",
"Matthew Bouchard",
"Matthew Cocke",
"Michael Faust",
"Michael Hardel",
"Mirik Gogri",
"Mustafa Mahdi",
"Márton Vaitkus",
"Nero Li",
"Nikita Lesnikov",
"Omar Zrien",
"Owen Campbell-Moore",
"Peter Ehrnstrom",
"RedAgent14",
"rehmi post",
"Richard Burgmann",
"Richard Comish",
"Ripta Pasay",
"Rish Kundalia",
"Robert Teed",
"Roobie",
"Ryan Williams",
"Sachit Nagpal",
"Solara570",
"Stevie Metke",
"Tal Einav",
"Ted Suzman",
"Thomas Tarler",
"Tom Fleming",
"Valeriy Skobelev",
"Xavier Bernard",
"Yavor Ivanov",
"Yaw Etse",
"YinYangBalance.Asia",
"Zach Cardwell",
],
}

View File

@@ -1,303 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part2.heat_equation import *
class ShowNewRuleAtDiscreteBoundary(DiscreteSetup):
CONFIG = {
"axes_config": {
"x_min": 0,
"stroke_width": 1,
"x_axis_config": {
"include_tip": False,
},
},
"freq_amplitude_pairs": [
(1, 0.5),
(2, 1),
(3, 0.5),
(4, 0.3),
],
"v_line_class": DashedLine,
"v_line_config": {
},
"step_size": 1,
"wait_time": 15,
"alpha": 0.25,
}
def construct(self):
self.add_axes()
self.set_points()
self.show_boundary_point_influenced_by_neighbor()
self.add_clock()
self.let_evolve()
def set_points(self):
axes = self.axes
for mob in axes.family_members_with_points():
if isinstance(mob, Line):
mob.set_stroke(width=1)
step_size = self.step_size
xs = np.arange(
axes.x_min,
axes.x_max + step_size,
step_size
)
dots = self.dots = self.get_dots(axes, xs)
self.v_lines = self.get_v_lines(dots)
self.rod_pieces = self.get_rod_pieces(dots)
# rod_pieces
self.add(self.dots)
self.add(self.v_lines)
self.add(self.rod_pieces)
def show_boundary_point_influenced_by_neighbor(self):
dots = self.dots
ld = dots[0]
ld_in = dots[1]
rd = dots[-1]
rd_in = dots[-2]
v_len = 0.75
l_arrow = Vector(v_len * LEFT)
l_arrow.move_to(ld.get_left(), RIGHT)
r_arrow = Vector(v_len * RIGHT)
r_arrow.move_to(rd.get_right(), LEFT)
arrows = VGroup(l_arrow, r_arrow)
q_marks = VGroup(*[
TexMobject("?").scale(1.5).next_to(
arrow, arrow.get_vector()
)
for arrow in arrows
])
arrows.set_color(YELLOW)
q_marks.set_color(YELLOW)
blocking_rects = VGroup(*[
BackgroundRectangle(VGroup(
*dots[i:-i],
*self.rod_pieces[i:-i]
))
for i in [1, 2]
])
for rect in blocking_rects:
rect.stretch(1.1, dim=1, about_edge=UP)
self.play(FadeIn(blocking_rects[0]))
self.play(
LaggedStartMap(ShowCreation, arrows),
LaggedStart(*[
FadeInFrom(q_mark, -arrow.get_vector())
for q_mark, arrow in zip(q_marks, arrows)
]),
run_time=1.5
)
self.wait()
# Point to inward neighbor
new_arrows = VGroup(*[
Arrow(
d1.get_center(),
VGroup(d1, d2).get_center(),
buff=0,
).match_style(l_arrow)
for d1, d2 in [(ld, ld_in), (rd, rd_in)]
])
new_arrows.match_style(arrows)
l_brace = Brace(VGroup(ld, ld_in), DOWN)
r_brace = Brace(VGroup(rd, rd_in), DOWN)
braces = VGroup(l_brace, r_brace)
for brace in braces:
brace.align_to(
self.axes.x_axis.get_center(), UP
)
brace.shift(SMALL_BUFF * DOWN)
brace.add(brace.get_tex("\\Delta x"))
self.play(
ReplacementTransform(arrows, new_arrows),
FadeOut(q_marks),
ReplacementTransform(*blocking_rects)
)
self.wait()
self.play(FadeInFrom(braces, UP))
self.wait()
self.play(
FadeOut(new_arrows),
FadeOut(blocking_rects[1]),
FadeOut(braces),
)
def add_clock(self):
super().add_clock()
self.time_label.add_updater(
lambda d, dt: d.increment_value(dt)
)
VGroup(
self.clock,
self.time_label
).shift(2 * LEFT)
def let_evolve(self):
dots = self.dots
dots.add_updater(self.update_dots)
wait_time = self.wait_time
self.play(
ClockPassesTime(
self.clock,
run_time=wait_time,
hours_passed=wait_time,
),
)
#
def get_dots(self, axes, xs):
dots = VGroup(*[
Dot(axes.c2p(x, self.temp_func(x, 0)))
for x in xs
])
max_width = 0.8 * self.step_size
for dot in dots:
dot.add_updater(self.update_dot_color)
if dot.get_width() > max_width:
dot.set_width(max_width)
return dots
def get_v_lines(self, dots):
return always_redraw(lambda: VGroup(*[
self.get_v_line(dot)
for dot in dots
]))
def get_v_line(self, dot):
x_axis = self.axes.x_axis
bottom = dot.get_bottom()
x = x_axis.p2n(bottom)
proj_point = x_axis.n2p(x)
return self.v_line_class(
proj_point, bottom,
**self.v_line_config,
)
def get_rod_pieces(self, dots):
axis = self.axes.x_axis
factor = 1 - np.exp(-(0.8 / self.step_size)**2)
width = factor * self.step_size
pieces = VGroup()
for dot in dots:
piece = Line(ORIGIN, width * RIGHT)
piece.set_stroke(width=5)
piece.move_to(dot)
piece.set_y(axis.get_center()[1])
piece.dot = dot
piece.add_updater(
lambda p: p.match_color(p.dot)
)
pieces.add(piece)
return pieces
def update_dot_color(self, dot):
y = self.axes.y_axis.p2n(dot.get_center())
dot.set_color(self.y_to_color(y))
def update_dots(self, dots, dt):
for ds in zip(dots, dots[1:], dots[2:]):
points = [d.get_center() for d in ds]
x0, x1, x2 = [p[0] for p in points]
dx = x1 - x0
y0, y1, y2 = [p[1] for p in points]
self.update_dot(
dot=ds[1],
dt=dt,
mean_diff=0.5 * (y2 - 2 * y1 + y0) / dx
)
if ds[0] is dots[0]:
self.update_dot(
dot=ds[0],
dt=dt,
mean_diff=(y1 - y0) / dx
)
elif ds[-1] is dots[-1]:
self.update_dot(
dot=ds[-1],
dt=dt,
mean_diff=(y1 - y2) / dx
)
def update_dot(self, dot, dt, mean_diff):
dot.shift(mean_diff * self.alpha * dt * UP)
class DiscreteEvolutionPoint25(ShowNewRuleAtDiscreteBoundary):
CONFIG = {
"step_size": 0.25,
"alpha": 0.5,
"wait_time": 30,
}
def construct(self):
self.add_axes()
self.set_points()
self.add_clock()
self.let_evolve()
class DiscreteEvolutionPoint1(DiscreteEvolutionPoint25):
CONFIG = {
"step_size": 0.1,
"v_line_config": {
"stroke_width": 1,
},
"wait_time": 30,
}
class FlatEdgesForDiscreteEvolution(DiscreteEvolutionPoint1):
CONFIG = {
"wait_time": 20,
"step_size": 0.1,
}
def let_evolve(self):
lines = VGroup(*[
Line(LEFT, RIGHT)
for x in range(2)
])
lines.set_width(1.5)
lines.set_stroke(WHITE, 5, opacity=0.5)
lines.add_updater(self.update_lines)
turn_animation_into_updater(
ShowCreation(lines, run_time=2)
)
self.add(lines)
super().let_evolve()
def update_lines(self, lines):
dots = self.dots
for line, dot in zip(lines, [dots[0], dots[-1]]):
line.move_to(dot)
class FlatEdgesForDiscreteEvolutionTinySteps(FlatEdgesForDiscreteEvolution):
CONFIG = {
"step_size": 0.025,
"wait_time": 10,
"v_line_class": Line,
"v_line_config": {
"stroke_opacity": 0.5,
}
}

View File

@@ -1,175 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part2.wordy_scenes import *
class IveHeardOfThis(TeacherStudentsScene):
def construct(self):
point = VectorizedPoint()
point.move_to(3 * RIGHT + 2 * UP)
self.student_says(
"I've heard\\\\", "of this!",
student_index=1,
target_mode="hooray",
bubble_kwargs={
"height": 3,
"width": 3,
"direction": RIGHT,
},
run_time=1,
)
self.change_student_modes(
"thinking", "hooray", "thinking",
look_at_arg=point,
added_anims=[self.teacher.change, "happy"]
)
self.wait(3)
self.student_says(
"But who\\\\", "cares?",
student_index=1,
target_mode="maybe",
bubble_kwargs={
"direction": RIGHT,
"width": 3,
"height": 3,
},
run_time=1,
)
self.change_student_modes(
"pondering", "maybe", "pondering",
look_at_arg=point,
added_anims=[self.teacher.change, "guilty"]
)
self.wait(5)
class InFouriersShoes(PiCreatureScene, WriteHeatEquationTemplate):
def construct(self):
randy = self.pi_creature
fourier = ImageMobject("Joseph Fourier")
fourier.set_height(4)
fourier.next_to(randy, RIGHT, LARGE_BUFF)
fourier.align_to(randy, DOWN)
equation = self.get_d1_equation()
equation.next_to(fourier, UP, MED_LARGE_BUFF)
decades = list(range(1740, 2040, 20))
time_line = NumberLine(
x_min=decades[0],
x_max=decades[-1],
tick_frequency=1,
tick_size=0.05,
longer_tick_multiple=4,
unit_size=0.2,
numbers_with_elongated_ticks=decades,
numbers_to_show=decades,
decimal_number_config={
"group_with_commas": False,
},
stroke_width=2,
)
time_line.add_numbers()
time_line.move_to(ORIGIN, RIGHT)
time_line.to_edge(UP)
triangle = ArrowTip(start_angle=-90 * DEGREES)
triangle.set_height(0.25)
triangle.move_to(time_line.n2p(2019), DOWN)
triangle.set_color(WHITE)
self.play(FadeInFrom(fourier, 2 * LEFT))
self.play(randy.change, "pondering")
self.wait()
self.play(
DrawBorderThenFill(triangle, run_time=1),
FadeInFromDown(equation),
FadeIn(time_line),
)
self.play(
Animation(triangle),
ApplyMethod(
time_line.shift,
time_line.n2p(2019) - time_line.n2p(1822),
run_time=5
),
)
self.wait()
class SineCurveIsUnrealistic(TeacherStudentsScene):
def construct(self):
self.student_says(
"But that would\\\\never happen!",
student_index=1,
bubble_kwargs={
"direction": RIGHT,
"height": 3,
"width": 4,
},
target_mode="angry"
)
self.change_student_modes(
"guilty", "angry", "hesitant",
added_anims=[
self.teacher.change, "tease"
]
)
self.wait(3)
self.play(
RemovePiCreatureBubble(self.students[1]),
self.teacher.change, "raise_right_hand"
)
self.change_all_student_modes(
"pondering",
look_at_arg=3 * UP,
)
self.wait(5)
class IfOnly(TeacherStudentsScene):
def construct(self):
self.teacher_says(
"If only!",
target_mode="angry"
)
self.change_all_student_modes(
"confused",
look_at_arg=self.screen
)
self.wait(3)
class SoWeGotNowhere(TeacherStudentsScene):
def construct(self):
self.student_says(
"So we've gotten\\\\nowhere!",
target_mode="angry",
added_anims=[
self.teacher.change, "guilty"
]
)
self.change_all_student_modes("angry")
self.wait()
text = TexMobject(
"&\\text{Actually,}\\\\",
"&\\sin\\left({x}\\right)"
"e^{-\\alpha {t}}\\\\",
"&\\text{isn't far off.}",
tex_to_color_map={
"{x}": GREEN,
"{t}": YELLOW,
}
)
text.scale(0.8)
self.teacher_says(
text,
content_introduction_class=FadeIn,
bubble_kwargs={
"width": 4,
"height": 3.5,
}
)
self.change_all_student_modes(
"pondering",
look_at_arg=self.screen
)
self.wait(3)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,919 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part2.wordy_scenes import *
class ThreeMainObservations(Scene):
def construct(self):
fourier = ImageMobject("Joseph Fourier")
name = TextMobject("Joseph Fourier")
name.match_width(fourier)
name.next_to(fourier, DOWN, SMALL_BUFF)
fourier.add(name)
fourier.set_height(5)
fourier.to_corner(DR)
fourier.shift(LEFT)
bubble = ThoughtBubble(
direction=RIGHT,
height=3,
width=4,
)
bubble.move_tip_to(fourier.get_corner(UL) + 0.5 * DR)
observations = VGroup(
TextMobject(
"1)",
"Sine = Nice",
),
TextMobject(
"2)",
"Linearity"
),
TextMobject(
"3)",
"Fourier series"
),
)
# heart = SuitSymbol("hearts")
# heart.replace(observations[0][2])
# observations[0][2].become(heart)
# observations[0][1].add(happiness)
# observations[2][2].align_to(
# observations[2][1], LEFT,
# )
observations.arrange(
DOWN,
aligned_edge=LEFT,
buff=2 * LARGE_BUFF,
)
observations.set_height(FRAME_HEIGHT - 2)
observations.to_corner(UL, buff=LARGE_BUFF)
self.add(fourier)
self.play(ShowCreation(bubble))
self.wait()
self.play(LaggedStart(*[
TransformFromCopy(bubble, observation[0])
for observation in observations
], lag_ratio=0.2))
self.play(
FadeOut(fourier),
FadeOut(bubble),
)
self.wait()
for obs in observations:
self.play(FadeInFrom(obs[1], LEFT))
self.wait()
class LastChapterWrapper(Scene):
def construct(self):
full_rect = FullScreenFadeRectangle(
fill_color=DARK_GREY,
fill_opacity=1,
)
rect = ScreenRectangle(height=6)
rect.set_stroke(WHITE, 2)
rect.set_fill(BLACK, 1)
title = TextMobject("Last chapter")
title.scale(2)
title.to_edge(UP)
rect.next_to(title, DOWN)
self.add(full_rect)
self.play(
FadeIn(rect),
Write(title, run_time=2),
)
self.wait()
class ThreeConstraints(WriteHeatEquationTemplate):
def construct(self):
self.cross_out_solving()
self.show_three_conditions()
def cross_out_solving(self):
equation = self.get_d1_equation()
words = TextMobject("Solve this equation")
words.to_edge(UP)
equation.next_to(words, DOWN)
cross = Cross(words)
self.add(words, equation)
self.wait()
self.play(ShowCreation(cross))
self.wait()
self.equation = equation
self.to_remove = VGroup(words, cross)
def show_three_conditions(self):
equation = self.equation
to_remove = self.to_remove
title = TexMobject(
"\\text{Constraints }"
"T({x}, {t})"
"\\text{ must satisfy:}",
**self.tex_mobject_config
)
title.to_edge(UP)
items = VGroup(
TextMobject("1)", "The PDE"),
TextMobject("2)", "Boundary condition"),
TextMobject("3)", "Initial condition"),
)
items.scale(0.7)
items.arrange(RIGHT, buff=LARGE_BUFF)
items.set_width(FRAME_WIDTH - 2)
items.next_to(title, DOWN, LARGE_BUFF)
items[1].set_color(MAROON_B)
items[2].set_color(RED)
bc_paren = TextMobject("(Explained soon)")
bc_paren.scale(0.7)
bc_paren.next_to(items[1], DOWN)
self.play(
FadeInFromDown(title),
FadeOutAndShift(to_remove, UP),
equation.scale, 0.6,
equation.next_to, items[0], DOWN,
equation.shift_onto_screen,
LaggedStartMap(FadeIn, [
items[0],
items[1][0],
items[2][0],
])
)
self.wait()
self.play(Write(items[1][1]))
bc_paren.match_y(equation)
self.play(FadeInFrom(bc_paren, UP))
self.wait(2)
self.play(Write(items[2][1]))
self.wait(2)
self.title = title
self.items = items
self.pde = equation
self.bc_paren = bc_paren
class RectAroundEquation(WriteHeatEquationTemplate):
def construct(self):
eq = self.get_d1_equation()
self.play(ShowCreationThenFadeAround(eq))
class BorderRect(Scene):
def construct(self):
rect = FullScreenFadeRectangle()
rect.set_stroke(WHITE, 3)
rect.set_fill(opacity=0)
self.add(rect)
class SeekIdealized(Scene):
def construct(self):
phrases = VGroup(*[
TextMobject(
"Seek", text, "problems",
tex_to_color_map={
"realistic": GREEN,
"{idealized}": YELLOW,
"over-idealized": YELLOW,
"general": BLUE,
}
)
for text in [
"realistic",
"{idealized}",
"over-idealized",
"general",
]
])
phrases.scale(2)
words = VGroup()
for phrase in phrases:
phrase.center()
word = phrase[1]
words.add(word)
phrase.remove(word)
arrow = Vector(DOWN)
arrow.set_stroke(WHITE, 6)
arrow.next_to(words[3], UP)
low_arrow = arrow.copy()
low_arrow.next_to(words[3], DOWN)
solutions = TextMobject("solutions")
solutions.scale(2)
solutions.move_to(phrases[3][1], UL)
models = TextMobject("models")
models.scale(2)
models.next_to(
words[0], RIGHT, buff=0.35,
aligned_edge=DOWN
)
phrases.center()
phrase = phrases[0]
self.add(phrase)
self.add(words[0])
self.wait()
words[0].save_state()
self.play(
words[0].to_edge, DOWN,
words[0].set_opacity, 0.5,
Transform(phrase, phrases[1]),
FadeInFrom(words[1], UP)
)
self.wait()
# self.play(
# words[1].move_to, words[2], RIGHT,
# FadeIn(words[2]),
# Transform(phrase, phrases[2])
# )
# self.wait()
self.play(
words[1].next_to, arrow, UP,
ShowCreation(arrow),
MaintainPositionRelativeTo(
phrase, words[1]
),
FadeInFrom(solutions, LEFT),
FadeIn(words[3]),
)
self.wait()
words[0].generate_target()
words[0].target.next_to(low_arrow, DOWN)
words[0].target.set_opacity(1)
models.shift(
words[0].target.get_center() -
words[0].saved_state.get_center()
)
self.play(
MoveToTarget(words[0]),
ShowCreation(low_arrow),
FadeInFrom(models, LEFT)
)
self.wait()
class SecondDerivativeOfSine(Scene):
def construct(self):
equation = TexMobject(
"{d^2 \\over d{x}^2}",
"\\cos\\left({x}\\right) =",
"-\\cos\\left({x}\\right)",
tex_to_color_map={
"{x}": GREEN,
}
)
self.add(equation)
class EquationAboveSineAnalysis(WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d1_equation()
equation.to_edge(UP)
equation.shift(2 * LEFT)
eq_index = equation.index_of_part_by_tex("=")
lhs = equation[:eq_index]
eq = equation[eq_index]
rhs = equation[eq_index + 1:]
t_terms = equation.get_parts_by_tex("{t}")[1:]
t_terms.save_state()
zeros = VGroup(*[
TexMobject("0").replace(t, dim_to_match=1)
for t in t_terms
])
zeros.align_to(t_terms, DOWN)
new_rhs = TexMobject(
"=", "-\\alpha \\cdot {T}", "({x}, 0)",
**self.tex_mobject_config
)
# new_rhs.move_to(equation.get_right())
# new_rhs.next_to(equation, DOWN, MED_LARGE_BUFF)
# new_rhs.align_to(eq, LEFT)
new_rhs.next_to(equation, RIGHT)
new_rhs.shift(SMALL_BUFF * DOWN)
self.add(equation)
self.play(ShowCreationThenFadeAround(rhs))
self.wait()
self.play(
FadeOutAndShift(t_terms, UP),
FadeInFrom(zeros, DOWN),
)
t_terms.fade(1)
self.wait()
self.play(
# VGroup(equation, zeros).next_to,
# new_rhs, LEFT,
FadeIn(new_rhs),
)
self.wait()
self.play(
VGroup(
lhs[6:],
eq,
rhs,
new_rhs[0],
new_rhs[-3:],
zeros,
).fade, 0.5,
)
self.play(ShowCreationThenFadeAround(lhs[:6]))
self.play(ShowCreationThenFadeAround(new_rhs[1:-3]))
self.wait()
class ExpVideoWrapper(Scene):
def construct(self):
self.add(FullScreenFadeRectangle(
fill_color=DARKER_GREY,
fill_opacity=1,
))
screen = ImageMobject("eoc_chapter5_thumbnail")
screen.set_height(6)
rect = SurroundingRectangle(screen, buff=0)
rect.set_stroke(WHITE, 2)
screen.add(rect)
title = TextMobject("Need a refresher?")
title.scale(1.5)
title.to_edge(UP)
screen.next_to(title, DOWN)
screen.center()
self.play(
# FadeInFrom(title, LEFT),
FadeInFrom(screen, DOWN),
)
self.wait()
class ShowSinExpDerivatives(WriteHeatEquationTemplate):
CONFIG = {
"tex_mobject_config": {
"tex_to_color_map": {
"{0}": WHITE,
"\\partial": WHITE,
"=": WHITE,
}
}
}
def construct(self):
pde = self.get_d1_equation_without_inputs()
pde.to_edge(UP)
pde.generate_target()
new_rhs = TexMobject(
"=- \\alpha \\cdot T",
**self.tex_mobject_config,
)
new_rhs.next_to(pde, RIGHT)
new_rhs.align_to(pde.get_part_by_tex("alpha"), DOWN)
equation1 = TexMobject(
"T({x}, {0}) = \\sin\\left({x}\\right)",
**self.tex_mobject_config
)
equation2 = TexMobject(
"T({x}, {t}) = \\sin\\left({x}\\right)",
"e^{-\\alpha{t}}",
**self.tex_mobject_config
)
for eq in equation1, equation2:
eq.next_to(pde, DOWN, MED_LARGE_BUFF)
eq2_part1 = equation2[:len(equation1)]
eq2_part2 = equation2[len(equation1):]
# Rectangles
exp_rect = SurroundingRectangle(eq2_part2)
exp_rect.set_stroke(RED, 3)
sin_rect = SurroundingRectangle(
eq2_part1[-3:]
)
sin_rect.set_color(BLUE)
VGroup(pde.target, new_rhs).center().to_edge(UP)
# Show proposed solution
self.add(pde)
self.add(equation1)
self.wait()
self.play(
MoveToTarget(pde),
FadeInFrom(new_rhs, LEFT)
)
self.wait()
self.play(
ReplacementTransform(equation1, eq2_part1),
FadeIn(eq2_part2),
)
self.play(ShowCreation(exp_rect))
self.wait()
self.play(FadeOut(exp_rect))
# Take partial derivatives wrt x
q_mark = TexMobject("?")
q_mark.next_to(pde.get_part_by_tex("="), UP)
q_mark.set_color(RED)
arrow1 = Vector(3 * DOWN + 1 * RIGHT, color=WHITE)
arrow1.scale(1.2 / arrow1.get_length())
arrow1.next_to(
eq2_part2.get_corner(DL),
DOWN, MED_LARGE_BUFF
)
ddx_label1 = TexMobject(
"\\partial \\over \\partial {x}",
**self.tex_mobject_config,
)
ddx_label1.scale(0.7)
ddx_label1.next_to(
arrow1.point_from_proportion(0.8),
UR, SMALL_BUFF
)
pde_ddx = VGroup(
*pde.get_parts_by_tex("\\partial")[2:],
pde.get_parts_by_tex("\\over")[1],
pde.get_part_by_tex("{x}"),
)
pde_ddx_rect = SurroundingRectangle(pde_ddx)
pde_ddx_rect.set_color(GREEN)
eq2_part2_rect = SurroundingRectangle(eq2_part2)
dx = TexMobject(
"\\cos\\left({x}\\right)", "e^{-\\alpha {t}}",
**self.tex_mobject_config
)
ddx = TexMobject(
"-\\sin\\left({x}\\right)", "e^{-\\alpha {t}}",
**self.tex_mobject_config
)
dx.next_to(arrow1, DOWN)
dx.align_to(eq2_part2, RIGHT)
x_shift = arrow1.get_end()[0] - arrow1.get_start()[0]
x_shift *= 2
dx.shift(x_shift * RIGHT)
arrow2 = arrow1.copy()
arrow2.next_to(dx, DOWN)
arrow2.shift(MED_SMALL_BUFF * RIGHT)
dx_arrows = VGroup(arrow1, arrow2)
ddx_label2 = ddx_label1.copy()
ddx_label2.shift(
arrow2.get_center() - arrow1.get_center()
)
ddx.next_to(arrow2, DOWN)
ddx.align_to(eq2_part2, RIGHT)
ddx.shift(2 * x_shift * RIGHT)
rhs = equation2[-6:]
self.play(
FadeInFromDown(q_mark)
)
self.play(
ShowCreation(pde_ddx_rect)
)
self.wait()
self.play(
LaggedStart(
GrowArrow(arrow1),
GrowArrow(arrow2),
),
TransformFromCopy(
pde_ddx[0], ddx_label1
),
TransformFromCopy(
pde_ddx[0], ddx_label2
),
)
self.wait()
self.play(
TransformFromCopy(rhs, dx)
)
self.wait()
self.play(
FadeIn(eq2_part2_rect)
)
self.play(
Transform(
eq2_part2_rect,
SurroundingRectangle(dx[-3:])
)
)
self.play(
FadeOut(eq2_part2_rect)
)
self.wait()
self.play(
TransformFromCopy(dx, ddx)
)
self.play(
FadeIn(
SurroundingRectangle(ddx).match_style(
pde_ddx_rect
)
)
)
self.wait()
# Take partial derivative wrt t
pde_ddt = pde[:pde.index_of_part_by_tex("=") - 1]
pde_ddt_rect = SurroundingRectangle(pde_ddt)
dt_arrow = Arrow(
arrow1.get_start(),
arrow2.get_end() + RIGHT,
buff=0
)
dt_arrow.flip(UP)
dt_arrow.next_to(dx_arrows, LEFT, MED_LARGE_BUFF)
dt_label = TexMobject(
"\\partial \\over \\partial {t}",
**self.tex_mobject_config,
)
dt_label.scale(1)
dt_label.next_to(
dt_arrow.get_center(), UL,
SMALL_BUFF,
)
rhs_copy = rhs.copy()
rhs_copy.next_to(dt_arrow.get_end(), DOWN)
rhs_copy.shift(MED_LARGE_BUFF * LEFT)
rhs_copy.match_y(ddx)
minus_alpha_in_exp = rhs_copy[-3][1:].copy()
minus_alpha_in_exp.set_color(RED)
minus_alpha = TexMobject("-\\alpha")
minus_alpha.next_to(rhs_copy, LEFT)
minus_alpha.align_to(rhs_copy[0][0], DOWN)
dot = TexMobject("\\cdot")
dot.move_to(midpoint(
minus_alpha.get_right(),
rhs_copy.get_left(),
))
self.play(
TransformFromCopy(
pde_ddx_rect,
pde_ddt_rect,
)
)
self.play(
GrowArrow(dt_arrow),
TransformFromCopy(
pde_ddt,
dt_label,
)
)
self.wait()
self.play(TransformFromCopy(rhs, rhs_copy))
self.play(FadeIn(minus_alpha_in_exp))
self.play(
ApplyMethod(
minus_alpha_in_exp.replace, minus_alpha,
path_arc=TAU / 4
),
FadeIn(dot),
)
self.play(
FadeIn(minus_alpha),
FadeOut(minus_alpha_in_exp),
)
self.wait()
rhs_copy.add(minus_alpha, dot)
self.play(
FadeIn(SurroundingRectangle(rhs_copy))
)
self.wait()
#
checkmark = TexMobject("\\checkmark")
checkmark.set_color(GREEN)
checkmark.move_to(q_mark, DOWN)
self.play(
FadeInFromDown(checkmark),
FadeOutAndShift(q_mark, UP)
)
self.wait()
class DerivativesOfLinearFunction(WriteHeatEquationTemplate):
CONFIG = {
"tex_mobject_config": {
"tex_to_color_map": {
"{c}": WHITE,
}
}
}
def construct(self):
func = TexMobject(
"T({x}, {t}) = {c} \\cdot {x}",
**self.tex_mobject_config
)
dx_T = TexMobject("{c}", **self.tex_mobject_config)
ddx_T = TexMobject("0")
dt_T = TexMobject("0")
for mob in func, dx_T, ddx_T, dt_T:
mob.scale(1.5)
func.generate_target()
arrows = VGroup(*[
Vector(1.5 * RIGHT, color=WHITE)
for x in range(3)
])
dx_arrows = arrows[:2]
dt_arrow = arrows[2]
dt_arrow.rotate(-TAU / 4)
dx_group = VGroup(
func.target,
dx_arrows[0],
dx_T,
dx_arrows[1],
ddx_T,
)
dx_group.arrange(RIGHT)
for arrow, char, vect in zip(arrows, "xxt", [UP, UP, RIGHT]):
label = TexMobject(
"\\partial \\over \\partial {%s}" % char,
**self.tex_mobject_config
)
label.scale(0.7)
label.next_to(arrow.get_center(), vect)
arrow.add(label)
dt_arrow.shift(
func.target[-3:].get_bottom() + MED_SMALL_BUFF * DOWN -
dt_arrow.get_start(),
)
dt_T.next_to(dt_arrow.get_end(), DOWN)
self.play(FadeInFromDown(func))
self.wait()
self.play(
MoveToTarget(func),
LaggedStartMap(Write, dx_arrows),
run_time=1,
)
self.play(
TransformFromCopy(func[-3:], dx_T),
path_arc=-TAU / 4,
)
self.play(
TransformFromCopy(dx_T, ddx_T),
path_arc=-TAU / 4,
)
self.wait()
# dt
self.play(Write(dt_arrow))
self.play(
TransformFromCopy(func[-3:], dt_T)
)
self.wait()
class FlatAtBoundaryWords(Scene):
def construct(self):
words = self.get_bc_words()
self.play(Write(words))
self.wait()
def get_bc_words(self):
return TextMobject(
"Flat at boundary\\\\"
"for all", "${t}$", "$> 0$",
)
class WriteOutBoundaryCondition(FlatAtBoundaryWords, ThreeConstraints, MovingCameraScene):
def construct(self):
self.force_skipping()
ThreeConstraints.construct(self)
self.revert_to_original_skipping_status()
self.add_ic()
self.write_bc_words()
self.write_bc_equation()
def add_ic(self):
image = ImageMobject("temp_initial_condition_example")
image.set_width(3)
border = SurroundingRectangle(image, buff=SMALL_BUFF)
border.shift(SMALL_BUFF * UP)
border.set_stroke(WHITE, 2)
group = Group(image, border)
group.next_to(self.items[2], DOWN)
self.add(group)
def write_bc_words(self):
bc_paren = self.bc_paren
bc_words = self.get_bc_words()
bc_words.match_width(self.items[1][1])
bc_words.move_to(bc_paren, UP)
bc_words.set_color_by_tex("{t}", YELLOW)
self.play(ShowCreationThenFadeAround(
VGroup(self.items[0], self.pde)
))
self.play(
FadeOutAndShift(bc_paren, UP),
FadeInFrom(bc_words, DOWN),
)
self.wait()
self.bc_words = bc_words
def write_bc_equation(self):
bc_words = self.bc_words
equation = TexMobject(
"{\\partial {T} \\over \\partial {x}}(0, {t}) = ",
"{\\partial {T} \\over \\partial {x}}(L, {t}) = ",
"0",
**self.tex_mobject_config,
)
equation.next_to(bc_words, DOWN, MED_LARGE_BUFF)
self.play(
self.camera_frame.shift, 0.8 * DOWN,
)
self.play(FadeInFrom(equation, UP))
self.wait()
class HeatEquationFrame(WriteHeatEquationTemplate):
def construct(self):
equation = self.get_d1_equation()
equation.to_edge(UP, buff=MED_SMALL_BUFF)
ddx = equation[-11:]
dt = equation[:11]
full_rect = FullScreenFadeRectangle(
fill_color=DARK_GREY,
fill_opacity=1,
)
smaller_rect = ScreenRectangle(
height=6,
fill_color=BLACK,
fill_opacity=1,
stroke_color=WHITE,
stroke_width=2,
)
smaller_rect.next_to(equation, DOWN)
self.add(full_rect)
self.add(smaller_rect)
self.add(equation)
self.wait()
self.play(ShowCreationThenFadeAround(
ddx,
surrounding_rectangle_config={
"stroke_color": GREEN,
}
))
self.wait()
self.play(ShowCreationThenFadeAround(dt))
self.wait()
class CompareFreqDecays1to2(Scene):
CONFIG = {
"freqs": [1, 2]
}
def construct(self):
background = FullScreenFadeRectangle(
fill_color=DARKER_GREY,
fill_opacity=1,
)
screens = VGroup(*[
ScreenRectangle(
height=4,
fill_color=BLACK,
fill_opacity=1,
stroke_width=1,
stroke_color=WHITE,
)
for x in range(2)
])
screens.arrange(RIGHT)
screens.set_width(FRAME_WIDTH - 1)
formulas = VGroup(*[
self.get_formula(freq)
for freq in self.freqs
])
for formula, screen in zip(formulas, screens):
formula.next_to(screen, UP)
self.add(background)
self.add(screens)
self.add(formulas)
self.wait()
def get_formula(self, freq):
f_str = str(freq)
return TexMobject(
"\\cos\\left(%s \\cdot {x}\\right)" % f_str,
"e^{-\\alpha \\cdot %s^2 \\cdot {t}}" % f_str,
tex_to_color_map={
"{x}": GREEN,
"{t}": YELLOW,
f_str: MAROON_B,
}
)
class CompareFreqDecays1to4(CompareFreqDecays1to2):
CONFIG = {
"freqs": [1, 4],
}
class CompareFreqDecays2to4(CompareFreqDecays1to2):
CONFIG = {
"freqs": [2, 4],
}
class WorryAboutGenerality(TeacherStudentsScene, WriteHeatEquationTemplate):
def construct(self):
eq = self.get_d1_equation()
diffyq = self.get_diffyq_set()
is_in = TexMobject("\\in")
is_in.scale(2)
group = VGroup(eq, is_in, diffyq)
group.arrange(RIGHT, buff=MED_LARGE_BUFF)
group.to_edge(UP)
arrow = Vector(DOWN)
arrow.set_stroke(WHITE, 5)
arrow.next_to(eq, DOWN)
themes = TextMobject("Frequent themes")
themes.scale(1.5)
themes.next_to(arrow, DOWN)
self.play(
self.get_student_changes(
"sad", "tired", "pleading"
),
self.teacher.change, "raise_right_hand",
FadeInFromDown(eq)
)
self.play(Write(group[1:]))
self.wait(2)
self.play(
ShowCreation(arrow),
self.get_student_changes(*3 * ["pondering"]),
)
self.play(
FadeInFrom(themes, UP),
self.get_student_changes(*3 * ["thinking"]),
self.teacher.change, "happy"
)
self.wait(4)
# def get_d1_equation(self):
# result = super().get_d1_equation()
# lp, rp = parens = TexMobject("(", ")")
# parens.match_height(result)
# lp.next_to(result, LEFT, SMALL_BUFF)
# rp.next_to(result, RIGHT, SMALL_BUFF)
# result.add_to_back(lp)
# result.add(rp)
# return result
def get_diffyq_set(self):
words = TextMobject(
"Differential\\\\equations"
)
words.scale(1.5)
words.set_color(BLUE)
lb = Brace(words, LEFT)
rb = Brace(words, RIGHT)
return VGroup(lb, words, rb)

View File

@@ -1,242 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part2.fourier_series import FourierOfTrebleClef
class ComplexFourierSeriesExample(FourierOfTrebleClef):
CONFIG = {
"file_name": "EighthNote",
"run_time": 10,
"n_vectors": 200,
"n_cycles": 2,
"max_circle_stroke_width": 0.75,
"drawing_height": 5,
"center_point": DOWN,
"top_row_y": 3,
"top_row_label_y": 2,
"top_row_x_spacing": 1.75,
"top_row_copy_scale_factor": 0.9,
"start_drawn": False,
}
def construct(self):
self.add_vectors_circles_path()
self.add_top_row(self.vectors, self.circles)
self.write_title()
self.highlight_vectors_one_by_one()
self.change_shape()
def write_title(self):
title = TextMobject("Complex\\\\Fourier series")
title.scale(1.5)
title.to_edge(LEFT)
title.match_y(self.path)
self.wait(5)
self.play(FadeInFromDown(title))
self.wait(2)
self.title = title
def highlight_vectors_one_by_one(self):
# Don't know why these vectors can't get copied.
# That seems like a problem that will come up again.
labels = self.top_row[-1]
next_anims = []
for vector, circle, label in zip(self.vectors, self.circles, labels):
# v_color = vector.get_color()
c_color = circle.get_color()
c_stroke_width = circle.get_stroke_width()
rect = SurroundingRectangle(label, color=PINK)
self.play(
# vector.set_color, PINK,
circle.set_stroke, RED, 3,
FadeIn(rect),
*next_anims
)
self.wait()
next_anims = [
# vector.set_color, v_color,
circle.set_stroke, c_color, c_stroke_width,
FadeOut(rect),
]
self.play(*next_anims)
def change_shape(self):
# path_mob = TexMobject("\\pi")
path_mob = SVGMobject("Nail_And_Gear")
new_path = path_mob.family_members_with_points()[0]
new_path.set_height(4)
new_path.move_to(self.path, DOWN)
new_path.shift(0.5 * UP)
new_coefs = self.get_coefficients_of_path(new_path)
new_vectors = self.get_rotating_vectors(
coefficients=new_coefs
)
new_drawn_path = self.get_drawn_path(new_vectors)
self.vector_clock.set_value(0)
self.vector_clock.suspend_updating(0)
vectors = self.vectors
anims = []
for vect, new_vect in zip(vectors, new_vectors):
new_vect.update()
new_vect.clear_updaters()
line = Line(stroke_width=0)
line.put_start_and_end_on(*vect.get_start_and_end())
anims.append(ApplyMethod(
line.put_start_and_end_on,
*new_vect.get_start_and_end()
))
vect.freq = new_vect.freq
vect.phase = new_vect.phase
vect.coefficient = new_vect.coefficient
vect.line = line
vect.add_updater(
lambda v: v.put_start_and_end_on(
*v.line.get_start_and_end()
)
)
anims += [
FadeOut(self.drawn_path)
]
self.play(*anims, run_time=3)
self.vector_clock.resume_updating()
for vect in self.vectors:
vect.remove_updater(vect.updaters[-1])
self.add(new_drawn_path)
for n in range(self.n_cycles):
self.run_one_cycle()
#
def get_path(self):
path = super().get_path()
path.set_height(self.drawing_height)
path.to_edge(DOWN)
return path
def add_top_row(self, vectors, circles, max_freq=3):
self.top_row = self.get_top_row(
vectors, circles, max_freq
)
self.add(self.top_row)
def get_top_row(self, vectors, circles, max_freq=3):
vector_copies = VGroup()
circle_copies = VGroup()
for vector, circle in zip(vectors, circles):
if vector.freq > max_freq:
break
vcopy = vector.copy()
vcopy.clear_updaters()
ccopy = circle.copy()
ccopy.clear_updaters()
ccopy.original = circle
vcopy.original = vector
vcopy.center_point = np.array([
vector.freq * self.top_row_x_spacing,
self.top_row_y,
0
])
ccopy.center_point = vcopy.center_point
vcopy.add_updater(self.update_top_row_vector_copy)
ccopy.add_updater(self.update_top_row_circle_copy)
vector_copies.add(vcopy)
circle_copies.add(ccopy)
dots = VGroup(*[
TexMobject("\\dots").next_to(
circle_copies, direction,
MED_LARGE_BUFF,
)
for direction in [LEFT, RIGHT]
])
labels = self.get_top_row_labels(vector_copies)
return VGroup(
vector_copies,
circle_copies,
dots,
labels,
)
def update_top_row_vector_copy(self, vcopy):
vcopy.become(vcopy.original)
vcopy.scale(self.top_row_copy_scale_factor)
vcopy.shift(vcopy.center_point - vcopy.get_start())
return vcopy
def update_top_row_circle_copy(self, ccopy):
ccopy.become(ccopy.original)
ccopy.scale(self.top_row_copy_scale_factor)
ccopy.move_to(ccopy.center_point)
return ccopy
def get_top_row_labels(self, vector_copies):
labels = VGroup()
for vector_copy in vector_copies:
freq = vector_copy.freq
label = Integer(freq)
label.move_to(np.array([
freq * self.top_row_x_spacing,
self.top_row_label_y,
0
]))
labels.add(label)
return labels
class ComplexFourierSeriesExampleEnd(ExternallyAnimatedScene):
pass
class FourierSeriesExampleWithRectForZoom(ComplexFourierSeriesExample):
CONFIG = {
"n_vectors": 100,
"slow_factor": 0.01,
"rect_scale_factor": 0.15,
"parametric_function_step_size": 0.0001,
"start_drawn": True,
}
def construct(self):
self.add_vectors_circles_path()
self.circles.set_stroke(opacity=0.5)
rect = self.get_rect()
rect.set_height(self.rect_scale_factor * FRAME_HEIGHT)
rect.add_updater(lambda m: m.move_to(
center_of_mass([
v.get_end()
for v in self.vectors
])
))
self.add(rect)
self.run_one_cycle()
def get_rect(self):
return ScreenRectangle(
color=WHITE,
stroke_width=2,
)
class ZoomedInFourierSeriesExample(FourierSeriesExampleWithRectForZoom, MovingCameraScene):
CONFIG = {
"vector_config": {
"max_tip_length_to_length_ratio": 0.15,
"tip_length": 0.05,
}
}
def setup(self):
ComplexFourierSeriesExample.setup(self)
MovingCameraScene.setup(self)
def get_rect(self):
return self.camera_frame

View File

@@ -1,22 +0,0 @@
from manimlib.imports import *
class WhyWouldYouCare(TeacherStudentsScene):
def construct(self):
self.student_says(
"Who cares!",
target_mode="sassy",
student_index=2,
added_anims=[self.teacher.change, "guilty"],
)
self.wait()
self.play(
RemovePiCreatureBubble(self.students[2]),
self.teacher.change, "raise_right_hand",
self.get_student_changes(
"pondering", "erm", "thinking",
look_at_arg=self.screen,
)
)
self.look_at(self.screen)
self.wait(5)

View File

@@ -1,345 +0,0 @@
from manimlib.imports import *
from active_projects.ode.part3.temperature_graphs import TemperatureGraphScene
from active_projects.ode.part2.wordy_scenes import WriteHeatEquationTemplate
class RelationToOtherVideos(Scene):
CONFIG = {
"camera_config": {
"background_color": DARK_GREY,
},
}
def construct(self):
# Show three videos
videos = self.get_video_thumbnails()
brace = Brace(videos, UP)
text = TextMobject("Heat equation")
text.scale(2)
text.next_to(brace, UP)
self.play(
LaggedStartMap(
FadeInFrom, videos,
lambda m: (m, LEFT),
lag_ratio=0.4,
run_time=2,
),
GrowFromCenter(brace),
FadeInFromDown(text),
)
self.wait()
group = Group(text, brace, videos)
# Show Fourier thinking
fourier = ImageMobject("Joseph Fourier")
fourier.set_height(4)
fourier.to_edge(RIGHT)
group.generate_target()
group.target.to_edge(DOWN)
fourier.align_to(group.target[0], DOWN)
bubble = ThoughtBubble(
direction=RIGHT,
width=3,
height=2,
fill_opacity=0.5,
stroke_color=WHITE,
)
bubble[-1].shift(0.25 * DOWN + 0.5 * LEFT)
bubble[:-1].rotate(20 * DEGREES)
for mob in bubble[:-1]:
mob.rotate(-20 * DEGREES)
bubble.move_tip_to(
fourier.get_corner(UL) + DOWN
)
bubble.to_edge(UP, buff=SMALL_BUFF)
self.play(
MoveToTarget(group),
FadeInFrom(fourier, LEFT)
)
self.play(Write(bubble, run_time=1))
self.wait()
# Discount first two
first_two = videos[:2]
first_two.generate_target()
first_two.target.scale(0.5)
first_two.target.to_corner(DL)
new_brace = Brace(first_two.target, UP)
self.play(
# fourier.scale, 0.8,
fourier.match_x, new_brace,
fourier.to_edge, UP,
MoveToTarget(first_two),
Transform(brace, new_brace),
text.scale, 0.7,
text.next_to, new_brace, UP,
FadeOutAndShift(bubble, LEFT),
)
self.play(
videos[2].scale, 1.7,
videos[2].to_corner, UR,
)
self.wait()
#
def get_video_thumbnails(self):
thumbnails = Group(
ImageMobject("diffyq_part2_thumbnail"),
ImageMobject("diffyq_part3_thumbnail"),
ImageMobject("diffyq_part4_thumbnail"),
)
for thumbnail in thumbnails:
thumbnail.set_height(4)
thumbnail.add(SurroundingRectangle(
thumbnail,
color=WHITE,
stroke_width=2,
buff=0
))
thumbnails.arrange(RIGHT, buff=LARGE_BUFF)
thumbnails.set_width(FRAME_WIDTH - 1)
return thumbnails
class ShowLinearity(WriteHeatEquationTemplate, TemperatureGraphScene):
CONFIG = {
"temp_text": "Temp",
"alpha": 0.1,
"axes_config": {
"z_max": 2,
"z_min": -2,
"z_axis_config": {
"tick_frequency": 0.5,
"unit_size": 1.5,
},
},
"default_surface_config": {
"resolution": (16, 16)
# "resolution": (4, 4)
},
"freqs": [2, 5],
}
def setup(self):
TemperatureGraphScene.setup(self)
WriteHeatEquationTemplate.setup(self)
def construct(self):
self.init_camera()
self.add_three_graphs()
self.show_words()
self.add_function_labels()
self.change_scalars()
def init_camera(self):
self.camera.set_distance(1000)
def add_three_graphs(self):
axes_group = self.get_axes_group()
axes0, axes1, axes2 = axes_group
freqs = self.freqs
scalar_trackers = Group(
ValueTracker(1),
ValueTracker(1),
)
graphs = VGroup(
self.get_graph(axes0, [freqs[0]], [scalar_trackers[0]]),
self.get_graph(axes1, [freqs[1]], [scalar_trackers[1]]),
self.get_graph(axes2, freqs, scalar_trackers),
)
plus = TexMobject("+").scale(2)
equals = TexMobject("=").scale(2)
plus.move_to(midpoint(
axes0.get_right(),
axes1.get_left(),
))
equals.move_to(midpoint(
axes1.get_right(),
axes2.get_left(),
))
self.add(axes_group)
self.add(graphs)
self.add(plus)
self.add(equals)
self.axes_group = axes_group
self.graphs = graphs
self.scalar_trackers = scalar_trackers
self.plus = plus
self.equals = equals
def show_words(self):
equation = self.get_d1_equation()
name = TextMobject("Heat equation")
name.next_to(equation, DOWN)
name.set_color_by_gradient(RED, YELLOW)
group = VGroup(equation, name)
group.to_edge(UP)
shift_val = 0.5 * RIGHT
arrow = Vector(1.5 * RIGHT)
arrow.move_to(group)
arrow.shift(shift_val)
linear_word = TextMobject("``Linear''")
linear_word.scale(2)
linear_word.next_to(arrow, RIGHT)
self.add(group)
self.wait()
self.play(
ShowCreation(arrow),
group.next_to, arrow, LEFT
)
self.play(FadeInFrom(linear_word, LEFT))
self.wait()
def add_function_labels(self):
axes_group = self.axes_group
graphs = self.graphs
solution_labels = VGroup()
for axes in axes_group:
label = TextMobject("Solution", "$\\checkmark$")
label.set_color_by_tex("checkmark", GREEN)
label.next_to(axes, DOWN)
solution_labels.add(label)
kw = {
"tex_to_color_map": {
"T_1": BLUE,
"T_2": GREEN,
}
}
T1 = TexMobject("a", "T_1", **kw)
T2 = TexMobject("b", "T_2", **kw)
T_sum = TexMobject("T_1", "+", "T_2", **kw)
T_sum_with_scalars = TexMobject(
"a", "T_1", "+", "b", "T_2", **kw
)
T1.next_to(graphs[0], UP)
T2.next_to(graphs[1], UP)
T_sum.next_to(graphs[2], UP)
T_sum.shift(SMALL_BUFF * DOWN)
T_sum_with_scalars.move_to(T_sum)
a_brace = Brace(T1[0], UP, buff=SMALL_BUFF)
b_brace = Brace(T2[0], UP, buff=SMALL_BUFF)
s1_decimal = DecimalNumber()
s1_decimal.match_color(T1[1])
s1_decimal.next_to(a_brace, UP, SMALL_BUFF)
s1_decimal.add_updater(lambda m: m.set_value(
self.scalar_trackers[0].get_value()
))
s2_decimal = DecimalNumber()
s2_decimal.match_color(T2[1])
s2_decimal.next_to(b_brace, UP, SMALL_BUFF)
s2_decimal.add_updater(lambda m: m.set_value(
self.scalar_trackers[1].get_value()
))
self.play(
FadeInFrom(T1[1], DOWN),
FadeInFrom(solution_labels[0], UP),
)
self.play(
FadeInFrom(T2[1], DOWN),
FadeInFrom(solution_labels[1], UP),
)
self.wait()
self.play(
TransformFromCopy(T1[1], T_sum[0]),
TransformFromCopy(T2[1], T_sum[2]),
TransformFromCopy(self.plus, T_sum[1]),
*[
Transform(
graph.copy().set_fill(opacity=0),
graphs[2].copy().set_fill(opacity=0),
remover=True
)
for graph in graphs[:2]
]
)
self.wait()
self.play(FadeInFrom(solution_labels[2], UP))
self.wait()
# Show constants
self.play(
FadeIn(T1[0]),
FadeIn(T2[0]),
FadeIn(a_brace),
FadeIn(b_brace),
FadeIn(s1_decimal),
FadeIn(s2_decimal),
FadeOut(T_sum),
FadeIn(T_sum_with_scalars),
)
def change_scalars(self):
s1, s2 = self.scalar_trackers
kw = {
"run_time": 2,
}
for graph in self.graphs:
graph.resume_updating()
self.play(s2.set_value, -0.5, **kw)
self.play(s1.set_value, -0.2, **kw)
self.play(s2.set_value, 1.5, **kw)
self.play(s1.set_value, 1.2)
self.play(s2.set_value, 0.3)
self.wait()
#
def get_axes_group(self):
axes_group = VGroup(*[
self.get_axes()
for x in range(3)
])
axes_group.arrange(RIGHT, buff=2)
axes_group.set_width(FRAME_WIDTH - 1)
axes_group.to_edge(DOWN, buff=1)
return axes_group
def get_axes(self):
axes = self.get_three_d_axes()
# axes.input_plane.set_fill(opacity=0)
# axes.input_plane.set_stroke(width=0.5)
# axes.add(axes.input_plane)
self.orient_three_d_mobject(axes)
axes.rotate(-5 * DEGREES, UP)
axes.set_width(4)
axes.x_axis.label.next_to(
axes.x_axis.get_end(), DOWN,
buff=2 * SMALL_BUFF
)
return axes
def get_graph(self, axes, freqs, scalar_trackers):
L = axes.x_max
a = self.alpha
def func(x, t):
scalars = [st.get_value() for st in scalar_trackers]
return np.sum([
s * np.cos(k * x) * np.exp(-a * (k**2) * t)
for freq, s in zip(freqs, scalars)
for k in [freq * PI / L]
])
def get_surface_graph_group():
return VGroup(
self.get_surface(axes, func),
self.get_time_slice_graph(axes, func, t=0),
)
result = always_redraw(get_surface_graph_group)
result.suspend_updating()
return result

View File

@@ -1,63 +0,0 @@
import numpy as np
# Physical constants
g = 9.8
L = 2
mu = 0.1
THETA_0 = np.pi / 3 # 60 degrees
THETA_DOT_0 = 0 # No initial angular velocity
# Definition of ODE
def get_theta_double_dot(theta, theta_dot):
return -mu * theta_dot - (g / L) * np.sin(theta)
# Solution to the differential equation
def theta(t):
# Initialize changing values
theta = THETA_0
theta_dot = THETA_DOT_0
delta_t = 0.01 # Some time step
for time in np.arange(0, t, delta_t):
# Take many little time steps of size delta_t
# until the total time is the function's input
theta_double_dot = get_theta_double_dot(
theta, theta_dot
)
theta += theta_dot * delta_t
theta_dot += theta_double_dot * delta_t
return theta

File diff suppressed because it is too large Load Diff

View File

@@ -1,283 +0,0 @@
from manimlib.imports import *
class WorkOutNumerically(Scene):
CONFIG = {
"M1_COLOR": TEAL,
"M2_COLOR": PINK,
}
def construct(self):
self.add_question()
self.add_example()
self.compute_rhs()
self.compute_lhs()
def add_question(self):
equation = self.original_equation = TexMobject(
"\\det(", "M_1", "M_2", ")", "=",
"\\det(", "M_1", ")",
"\\det(", "M_2", ")",
)
equation.set_color_by_tex_to_color_map({
"M_1": self.M1_COLOR,
"M_2": self.M2_COLOR,
})
challenge = TextMobject("Explain in one sentence")
challenge.set_color(YELLOW)
group = VGroup(challenge, equation)
group.arrange(DOWN)
group.to_edge(UP)
self.add(equation)
self.play(Write(challenge))
self.wait()
def add_example(self):
M1 = self.M1 = Matrix([[2, -1], [1, 1]])
M1.set_color(self.M1_COLOR)
self.M1_copy = M1.copy()
M2 = self.M2 = Matrix([[-1, 4], [1, 1]])
M2.set_color(self.M2_COLOR)
self.M2_copy = M2.copy()
eq_parts = TexMobject(
"\\det", "\\big(", "\\big)", "=",
"\\det", "\\big(", "\\big)",
"\\det", "\\big(", "\\big)",
)
for part in eq_parts.get_parts_by_tex("\\big"):
part.scale(2)
part.stretch(1.5, 1)
i1, i2, i3 = [
eq_parts.index_of_part(part) + 1
for part in eq_parts.get_parts_by_tex("\\big(")
]
equation = self.equation_with_numbers = VGroup(*it.chain(
eq_parts[:i1], [M1, M2],
eq_parts[i1:i2], [self.M1_copy],
eq_parts[i2:i3], [self.M2_copy],
eq_parts[i3:],
))
equation.arrange(RIGHT, buff=SMALL_BUFF)
eq_parts.get_part_by_tex("=").shift(0.2 * SMALL_BUFF * DOWN)
equation.set_width(FRAME_WIDTH - 2 * LARGE_BUFF)
equation.next_to(self.original_equation, DOWN, MED_LARGE_BUFF)
self.play(LaggedStartMap(FadeIn, equation))
def compute_rhs(self):
M1, M2 = self.M1_copy, self.M2_copy
line1 = VGroup(
TexMobject(
"\\big(", "2", "\\cdot", "2", "-",
"(-1)", "\\cdot", "1", "\\big)"
),
TexMobject(
"\\big(", "-1", "\\cdot", "1", "-",
"4", "\\cdot", "1", "\\big)"
),
)
line1.arrange(RIGHT, buff=SMALL_BUFF)
line1[0].set_color(self.M1_COLOR)
line1[1].set_color(self.M2_COLOR)
indices = [1, 3, 5, 7]
line2 = TexMobject("(3)", "(-5)")
line2.match_style(line1)
line3 = TexMobject("-15")
arrows = [TexMobject("\\downarrow") for x in range(2)]
lines = VGroup(line1, arrows[0], line2, arrows[1], line3)
lines.arrange(DOWN, buff=MED_SMALL_BUFF)
lines.next_to(self.equation_with_numbers, DOWN, buff=MED_LARGE_BUFF)
lines.to_edge(RIGHT)
for matrix, det in zip([M1, M2], line1):
numbers = VGroup(*[det[i] for i in indices])
numbers_iter = iter(numbers)
non_numbers = VGroup(*[m for m in det if m not in numbers])
matrix_numbers = VGroup(*[
matrix.mob_matrix[i][j].copy()
for i, j in ((0, 0), (1, 1), (0, 1), (1, 0))
])
self.play(
LaggedStartMap(FadeIn, non_numbers, run_time=1),
LaggedStartMap(
ReplacementTransform,
matrix_numbers,
lambda m: (m, next(numbers_iter)),
path_arc=TAU / 6
),
)
self.play(LaggedStartMap(FadeIn, lines[1:], run_time=3))
def compute_lhs(self):
matrix = Matrix([[-3, 7], [0, 5]])
matrix.set_color(BLUE)
matrix.scale(0.8)
empty_det_tex = TexMobject("\\det", "\\big(", "\\big)")
empty_det_tex[1:].scale(1.5)
empty_det_tex[1:].match_height(matrix, stretch=True)
det_tex = VGroup(empty_det_tex[:2], matrix, *empty_det_tex[2:])
det_tex.arrange(RIGHT, buff=SMALL_BUFF)
group = VGroup(
det_tex,
TexMobject("\\downarrow"),
TexMobject("(-3)(5) - (7)(0)").scale(0.8),
TexMobject("\\downarrow"),
TexMobject("-15"),
)
group.arrange(DOWN, buff=2 * SMALL_BUFF)
# group.set_height(0.4*FRAME_HEIGHT)
group.next_to(self.equation_with_numbers, DOWN)
group.shift(FRAME_WIDTH * LEFT / 4)
self.play(FadeIn(empty_det_tex))
self.play(*[
ReplacementTransform(M.copy(), matrix)
for M in (self.M1, self.M2)
])
self.play(LaggedStartMap(FadeIn, group[1:]))
self.wait()
class LetsGoInOneSentence(TeacherStudentsScene):
def construct(self):
self.teacher_says(
"Here we go, \\\\", "one sentence!"
)
self.change_all_student_modes("hooray")
self.teacher_says(
"Or three...", "",
target_mode="guilty"
)
self.change_all_student_modes("sassy")
self.wait(4)
class SuccessiveLinearTransformations(LinearTransformationScene):
CONFIG = {
"matrix_2": [[3, -1], [0, 1]],
"matrix_1": [[2, 3], [-1. / 3, 2]],
}
def construct(self):
self.create_product_and_inverse()
self.scale_area_successively()
self.apply_transformations_successively()
self.scale_area_successively(
"\\det(M_2)", "\\det(M_1)", "\\det(M_1 M_2)",
reset=False
)
# self.show_det_as_scaling_factor()
def create_product_and_inverse(self):
self.matrix_product = np.dot(self.matrix_1, self.matrix_2)
self.matrix_product_inverse = np.linalg.inv(self.matrix_product)
def scale_area_successively(self, tex2="3", tex1="5", tex_prod="15", reset=True):
self.add_unit_square()
t1 = "$%s \\, \\cdot $" % tex1
t2 = "$%s \\, \\cdot $" % tex2
t3 = "Area"
areas = VGroup(
TextMobject("", "", t3),
TextMobject("", t2, t3),
TextMobject(t1, t2, t3),
)
areas.scale(0.8)
areas.move_to(self.square)
area = areas[0]
self.add_moving_mobject(area, areas[1])
self.play(
FadeIn(self.square),
Write(area),
Animation(self.basis_vectors)
)
self.apply_matrix(self.matrix_2)
self.wait()
self.add_moving_mobject(area, areas[2])
self.apply_matrix(self.matrix_1)
self.wait()
product = VGroup(area[:2])
brace = Brace(product, DOWN, buff=SMALL_BUFF)
brace_tex = brace.get_tex(tex_prod, buff=SMALL_BUFF)
brace_tex.scale(0.8, about_edge=UP)
self.play(
GrowFromCenter(brace),
Write(brace_tex)
)
self.wait()
if reset:
self.play(
FadeOut(VGroup(self.square, area, brace, brace_tex)),
Animation(self.plane),
Animation(self.basis_vectors)
)
self.transformable_mobjects.remove(self.square)
self.moving_mobjects = []
self.reset_plane()
self.wait()
def apply_transformations_successively(self):
M1, M2, all_space = expression = TexMobject(
"M_1", "M_2", "\\text{(All 2d space)}"
)
expression.set_color_by_tex_to_color_map({
"M_1": TEAL,
"M_2": PINK,
})
expression.shift(FRAME_WIDTH * LEFT / 4)
expression.to_edge(UP)
for part in expression:
part.add_background_rectangle()
part.background_rectangle.stretch(1.05, 0)
M1.save_state()
M1.move_to(ORIGIN)
M1.fade(1)
# Apply one after the other
self.play(
FocusOn(M2, run_time=1),
FadeIn(VGroup(M2, all_space))
)
self.add_foreground_mobjects(M2, all_space)
self.apply_matrix(self.matrix_2)
self.wait()
self.play(M1.restore)
self.add_foreground_mobjects(M1)
self.apply_matrix(self.matrix_1)
self.wait()
# Show full composition
rp, lp = parens = TexMobject("()")
matrices = VGroup(M1, M2)
matrices.generate_target()
parens.match_height(matrices)
lp.move_to(matrices, RIGHT)
matrices.target.next_to(lp, LEFT, SMALL_BUFF)
rp.next_to(matrices.target, LEFT, SMALL_BUFF)
self.reset_plane()
self.play(
MoveToTarget(matrices),
*list(map(GrowFromCenter, parens))
)
self.apply_matrix(self.matrix_product)
self.wait()
self.reset_plane()
def show_det_as_scaling_factor(self):
pass
###
def reset_plane(self):
plane_and_bases = VGroup(self.plane, self.basis_vectors)
self.play(FadeOut(plane_and_bases))
self.apply_matrix(self.matrix_product_inverse, run_time=0)
self.play(FadeIn(plane_and_bases))

View File

@@ -1,222 +0,0 @@
from fractions import Fraction
from manimlib.imports import *
from functools import reduce
class FractionMobject(VGroup):
CONFIG = {
"max_height": 1,
}
def __init__(self, fraction, **kwargs):
VGroup.__init__(self, **kwargs)
numerator = self.numerator = Integer(fraction.numerator)
self.add(numerator)
if fraction.denominator != 1:
denominator = Integer(fraction.denominator)
line = TexMobject("/")
numerator.next_to(line, LEFT, SMALL_BUFF)
denominator.next_to(line, RIGHT, SMALL_BUFF)
self.add(numerator, line, denominator)
self.set_height(min(self.max_height, self.get_height()))
self.value = fraction
def add_plus_if_needed(self):
if self.value > 0:
plus = TexMobject("+")
plus.next_to(self, LEFT, SMALL_BUFF)
plus.match_color(self)
self.add_to_back(plus)
class ShowRowReduction(Scene):
CONFIG = {
"matrices": [
[
[2, -1, -1],
[0, 3, -4],
[-3, 2, 1],
],
[
[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
],
# [[1], [2], [3]],
],
"h_spacing": 2,
"extra_h_spacing": 0.5,
"v_spacing": 1,
"include_separation_lines": True,
"changing_row_color": YELLOW,
"reference_row_color": BLUE,
}
def construct(self):
self.initialize_terms()
self.apply_row_rescaling(0, Fraction(1, 2))
self.add_row_multiple_to_row(2, 0, 3)
self.apply_row_rescaling(1, Fraction(1, 3))
self.add_row_multiple_to_row(2, 1, Fraction(-1, 2))
self.apply_row_rescaling(2, Fraction(6))
self.add_row_multiple_to_row(0, 1, Fraction(1, 2))
self.add_row_multiple_to_row(0, 2, Fraction(7, 6))
self.add_row_multiple_to_row(1, 2, Fraction(4, 3))
self.wait()
def initialize_terms(self):
full_matrix = reduce(
lambda m, v: np.append(m, v, axis=1),
self.matrices
)
mobject_matrix = np.vectorize(FractionMobject)(full_matrix)
rows = self.rows = VGroup(*it.starmap(VGroup, mobject_matrix))
for i, row in enumerate(rows):
for j, term in enumerate(row):
term.move_to(
i * self.v_spacing * DOWN +
j * self.h_spacing * RIGHT
)
# Visually seaprate distinct parts
separation_lines = self.separation_lines = VGroup()
lengths = [len(m[0]) for m in self.matrices]
for partial_sum in np.cumsum(lengths)[:-1]:
VGroup(*mobject_matrix[:, partial_sum:].flatten()).shift(
self.extra_h_spacing * RIGHT
)
c1 = VGroup(*mobject_matrix[:, partial_sum - 1])
c2 = VGroup(*mobject_matrix[:, partial_sum])
line = DashedLine(c1.get_top(), c1.get_bottom())
line.move_to(VGroup(c1, c2))
separation_lines.add(line)
if self.include_separation_lines:
group = VGroup(rows, separation_lines)
else:
group = rows
group.center().to_edge(DOWN, buff=2)
self.add(group)
def add_variables(self):
# If it is meant to represent a system of equations
pass
def apply_row_rescaling(self, row_index, scale_factor):
row = self.rows[row_index]
new_row = VGroup()
for element in row:
target = FractionMobject(element.value * scale_factor)
target.move_to(element)
new_row.add(target)
new_row.set_color(self.changing_row_color)
label = VGroup(
TexMobject("r_%d" % (row_index + 1)),
TexMobject("\\rightarrow"),
TexMobject("("),
FractionMobject(scale_factor),
TexMobject(")"),
TexMobject("r_%d" % (row_index + 1)),
)
label.arrange(RIGHT, buff=SMALL_BUFF)
label.to_edge(UP)
VGroup(label[0], label[-1]).set_color(self.changing_row_color)
scalar_mob = FractionMobject(scale_factor)
scalar_mob.add_to_back(
TexMobject("\\times").next_to(scalar_mob, LEFT, SMALL_BUFF)
)
scalar_mob.scale(0.5)
scalar_mob.next_to(row[0], DR, SMALL_BUFF)
# Do do, fancier illustrations here
self.play(
FadeIn(label),
row.set_color, self.changing_row_color,
)
self.play(FadeIn(scalar_mob))
for elem, new_elem in zip(row, new_row):
self.play(scalar_mob.next_to, elem, DR, SMALL_BUFF)
self.play(ReplacementTransform(elem, new_elem, path_arc=30 * DEGREES))
self.play(FadeOut(scalar_mob))
self.play(new_row.set_color, WHITE)
self.play(FadeOut(label))
self.rows.submobjects[row_index] = new_row
def add_row_multiple_to_row(self, row1_index, row2_index, scale_factor):
row1 = self.rows[row1_index]
row2 = self.rows[row2_index]
new_row1 = VGroup()
scaled_row2 = VGroup()
for elem1, elem2 in zip(row1, row2):
target = FractionMobject(elem1.value + scale_factor * elem2.value)
target.move_to(elem1)
new_row1.add(target)
scaled_term = FractionMobject(scale_factor * elem2.value)
scaled_term.move_to(elem2)
scaled_row2.add(scaled_term)
new_row1.set_color(self.changing_row_color)
scaled_row2.set_color(self.reference_row_color)
for elem1, elem2 in zip(row1, scaled_row2):
elem2.add_plus_if_needed()
elem2.scale(0.5)
elem2.next_to(elem1, UL, buff=SMALL_BUFF)
label = VGroup(
TexMobject("r_%d" % (row1_index + 1)),
TexMobject("\\rightarrow"),
TexMobject("r_%d" % (row1_index + 1)),
TexMobject("+"),
TexMobject("("),
FractionMobject(scale_factor),
TexMobject(")"),
TexMobject("r_%d" % (row2_index + 1)),
)
label.arrange(RIGHT, buff=SMALL_BUFF)
label.to_edge(UP)
VGroup(label[0], label[2]).set_color(self.changing_row_color)
label[-1].set_color(self.reference_row_color)
self.play(
FadeIn(label),
row1.set_color, self.changing_row_color,
row2.set_color, self.reference_row_color,
)
row1.target.next_to(self.rows, UP, buff=2)
row1.target.align_to(row1, LEFT)
row2.target.next_to(row1.target, DOWN, buff=MED_LARGE_BUFF)
lp, rp = row2_parens = TexMobject("()")
row2_parens.set_height(row2.get_height() + 2 * SMALL_BUFF)
lp.next_to(row2, LEFT, SMALL_BUFF)
rp.next_to(row2, RIGHT, SMALL_BUFF)
scalar = FractionMobject(scale_factor)
scalar.next_to(lp, LEFT, SMALL_BUFF)
scalar.add_plus_if_needed()
self.play(
FadeIn(row2_parens),
Write(scalar),
)
self.play(ReplacementTransform(row2.copy(), scaled_row2))
self.wait()
for elem, new_elem, s_elem in zip(row1, new_row1, scaled_row2):
self.play(
FadeOut(elem),
FadeIn(new_elem),
Transform(s_elem, new_elem.copy().fade(1), remover=True)
)
self.wait()
self.play(
FadeOut(label),
FadeOut(row2_parens),
FadeOut(scalar),
new_row1.set_color, WHITE,
row2.set_color, WHITE,
)
self.rows.submobjects[row1_index] = new_row1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,32 +0,0 @@
from manimlib.imports import *
class Birthday(Scene):
def construct(self):
sidelength = 6.0
corner = np.array([-sidelength/2,-sidelength/2,0])
nb_days_left = 365.0
toggle = False
def probability():
width = rect.get_width()
height = rect.get_height()
return width * height / sidelength**2
rect = Square().scale(sidelength/2)
while probability() > 0.5:
self.add(rect.copy())
nb_days_left -= 1
if toggle:
dim = 0
else:
dim = 1
rect.stretch_about_point(nb_days_left / 365, dim, corner)
toggle = not toggle

View File

@@ -1,82 +0,0 @@
from manimlib.imports import *
class Introduction(TeacherStudentsScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": True,
},
}
def construct(self):
self.show_series()
self.show_examples()
def show_series(self):
series = VideoSeries(num_videos = 11)
series.to_edge(UP)
this_video = series[0]
this_video.set_color(YELLOW)
this_video.save_state()
this_video.set_fill(opacity = 0)
this_video.center()
this_video.set_height(FRAME_HEIGHT)
self.this_video = this_video
words = TextMobject(
"Welcome to \\\\",
"Essence of Probability"
)
words.set_color_by_tex("Essence of Probability", YELLOW)
self.teacher.change_mode("happy")
self.play(
FadeIn(
series,
lag_ratio = 0.5,
run_time = 2
),
Blink(self.get_teacher())
)
self.teacher_says(words, target_mode = "hooray")
self.change_student_modes(
*["hooray"]*3,
look_at_arg = series[1].get_left(),
added_anims = [
ApplyMethod(this_video.restore, run_time = 3),
]
)
self.play(*[
ApplyMethod(
video.shift, 0.5*video.get_height()*DOWN,
run_time = 3,
rate_func = squish_rate_func(
there_and_back, alpha, alpha+0.3
)
)
for video, alpha in zip(series, np.linspace(0, 0.7, len(series)))
]+[
Animation(self.teacher.bubble),
Animation(self.teacher.bubble.content),
])
self.play(
FadeOut(self.teacher.bubble),
FadeOut(self.teacher.bubble.content),
self.get_teacher().change_mode, "raise_right_hand",
*[
ApplyMethod(pi.change_mode, "pondering")
for pi in self.get_students()
]
)
self.wait()
self.series = series
def show_examples(self):
self.wait(10)
# put examples here in video editor

View File

@@ -1,82 +0,0 @@
from manimlib.imports import *
class Introduction(TeacherStudentsScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": True,
},
}
def construct(self):
self.show_series()
self.show_examples()
def show_series(self):
series = VideoSeries(num_videos = 11)
series.to_edge(UP)
this_video = series[0]
this_video.set_color(YELLOW)
this_video.save_state()
this_video.set_fill(opacity = 0)
this_video.center()
this_video.set_height(FRAME_HEIGHT)
self.this_video = this_video
words = TextMobject(
"Welcome to \\\\",
"Essence of Probability"
)
words.set_color_by_tex("Essence of Probability", YELLOW)
self.teacher.change_mode("happy")
self.play(
FadeIn(
series,
lag_ratio = 0.5,
run_time = 2
),
Blink(self.get_teacher())
)
self.teacher_says(words, target_mode = "hooray")
self.change_student_modes(
*["hooray"]*3,
look_at_arg = series[1].get_left(),
added_anims = [
ApplyMethod(this_video.restore, run_time = 3),
]
)
self.play(*[
ApplyMethod(
video.shift, 0.5*video.get_height()*DOWN,
run_time = 3,
rate_func = squish_rate_func(
there_and_back, alpha, alpha+0.3
)
)
for video, alpha in zip(series, np.linspace(0, 0.7, len(series)))
]+[
Animation(self.teacher.bubble),
Animation(self.teacher.bubble.content),
])
self.play(
FadeOut(self.teacher.bubble),
FadeOut(self.teacher.bubble.content),
self.get_teacher().change_mode, "raise_right_hand",
*[
ApplyMethod(pi.change_mode, "pondering")
for pi in self.get_students()
]
)
self.wait()
self.series = series
def show_examples(self):
self.wait(10)
# put examples here in video editor

View File

@@ -1,64 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class ShuffleThroughAllSequences(Scene):
CONFIG = {
"nb_coins" : 20,
"run_time" : 5,
"fps" : int(1.0/PRODUCTION_QUALITY_FRAME_DURATION),
"coin_size" : 0.5,
"coin_spacing" : 0.65
}
def construct(self):
nb_frames = self.run_time * self.fps
nb_relevant_coins = int(np.log2(nb_frames)) + 1
print("relevant coins:", nb_relevant_coins)
nb_idle_coins = self.nb_coins - nb_relevant_coins
idle_heads = CoinSequence(nb_idle_coins * ["H"],
radius = self.coin_size * 0.5,
spacing = self.coin_spacing)
idle_tails = CoinSequence(nb_idle_coins * ["T"],
radius = self.coin_size * 0.5,
spacing = self.coin_spacing)
idle_tails.fade(0.5)
idle_part = VGroup(idle_heads, idle_tails)
left_idle_part = CoinSequence(6 * ["H"],
radius = self.coin_size * 0.5,
spacing = self.coin_spacing)
#self.add(idle_part, left_idle_part)
self.add(left_idle_part)
last_coin_seq = VGroup()
for i in range(2**nb_relevant_coins):
binary_seq = binary(i)
# pad to the left with 0s
nb_leading_zeroes = nb_relevant_coins - len(binary_seq)
for j in range(nb_leading_zeroes):
binary_seq.insert(0, 0)
seq2 = ["H" if x == 0 else "T" for x in binary_seq]
coin_seq = CoinSequence(seq2,
radius = self.coin_size * 0.5,
spacing = self.coin_spacing)
coin_seq.next_to(idle_part, LEFT, buff = self.coin_spacing - self.coin_size)
left_idle_part.next_to(coin_seq, LEFT, buff = self.coin_spacing - self.coin_size)
all_coins = VGroup(left_idle_part, coin_seq) #, idle_part)
all_coins.center()
self.remove(last_coin_seq)
self.add(coin_seq)
#self.wait(1.0/self.fps)
self.update_frame()
self.add_frames(self.get_frame())
last_coin_seq = coin_seq
print(float(i)/2**nb_relevant_coins)

View File

@@ -1,228 +0,0 @@
from manimlib.imports import *
class IllustrateAreaModelBayes(Scene):
def construct(self):
color_A = YELLOW
color_not_A = YELLOW_E
color_B = MAROON
color_not_B = MAROON_E
opacity_B = 0.7
# show independent events
sample_space_width = sample_space_height = 3
p_of_A = 0.7
p_of_not_A = 1 - p_of_A
p_of_B = 0.8
p_of_not_B = 1 - p_of_B
rect_A = Rectangle(
width = p_of_A * sample_space_width,
height = 1 * sample_space_height,
stroke_width = 0,
fill_color = color_A,
fill_opacity = 1.0
).move_to(3 * RIGHT + 1.5 * UP)
rect_not_A = Rectangle(
width = p_of_not_A * sample_space_width,
height = 1 * sample_space_height,
stroke_width = 0,
fill_color = color_not_A,
fill_opacity = 1.0
).next_to(rect_A, RIGHT, buff = 0)
brace_A = Brace(rect_A, DOWN)
label_A = TexMobject("P(A)").next_to(brace_A, DOWN).scale(0.7)
brace_not_A = Brace(rect_not_A, DOWN)
label_not_A = TexMobject("P(\\text{not }A)").next_to(brace_not_A, DOWN).scale(0.7)
# self.play(
# LaggedStartMap(FadeIn, VGroup(rect_A, rect_not_A))
# )
# self.play(
# ShowCreation(brace_A),
# Write(label_A),
# )
rect_B = Rectangle(
width = 1 * sample_space_width,
height = p_of_B * sample_space_height,
stroke_width = 0,
fill_color = color_B,
fill_opacity = opacity_B
)
rect_not_B = Rectangle(
width = 1 * sample_space_width,
height = p_of_not_B * sample_space_height,
stroke_width = 0,
fill_color = color_not_B,
fill_opacity = opacity_B
).next_to(rect_B, UP, buff = 0)
VGroup(rect_B, rect_not_B).move_to(VGroup(rect_A, rect_not_A))
brace_B = Brace(rect_B, LEFT)
label_B = TexMobject("P(B)").next_to(brace_B, LEFT).scale(0.7)
brace_not_B = Brace(rect_not_B, LEFT)
label_not_B = TexMobject("P(\\text{not }B)").next_to(brace_not_B, LEFT).scale(0.7)
# self.play(
# LaggedStartMap(FadeIn, VGroup(rect_B, rect_not_B))
# )
# self.play(
# ShowCreation(brace_B),
# Write(label_B),
# )
rect_A_and_B = Rectangle(
width = p_of_A * sample_space_width,
height = p_of_B * sample_space_height,
stroke_width = 3,
fill_opacity = 0.0
).align_to(rect_A, DOWN).align_to(rect_A,LEFT)
label_A_and_B = TexMobject("P(A\\text{ and }B)").scale(0.7)
label_A_and_B.move_to(rect_A_and_B)
# self.play(
# ShowCreation(rect_A_and_B)
# )
indep_formula = TexMobject("P(A\\text{ and }B)", "=", "P(A)", "\cdot", "P(B)")
indep_formula = indep_formula.scale(0.7)
label_p_of_b = indep_formula.get_part_by_tex("P(B)")
label_A_and_B_copy = label_A_and_B.copy()
label_A_copy = label_A.copy()
label_B_copy = label_B.copy()
# self.add(label_A_and_B_copy, label_A_copy, label_B_copy)
# self.play(Transform(label_A_and_B_copy, indep_formula[0]))
# self.play(FadeIn(indep_formula[1]))
# self.play(Transform(label_A_copy, indep_formula[2]))
# self.play(FadeIn(indep_formula[3]))
# self.play(Transform(label_B_copy, indep_formula[4]))
#self.wait()
label_A_and_B_copy = indep_formula[0]
label_A_copy = indep_formula[2]
label_B_copy = indep_formula[4]
# show conditional prob
rect_A_and_B.set_fill(color = RED, opacity = 0.5)
rect_A_and_not_B = Rectangle(
width = p_of_A * sample_space_width,
height = p_of_not_B * sample_space_height,
stroke_width = 0,
fill_color = color_not_B,
fill_opacity = opacity_B
).next_to(rect_A_and_B, UP, buff = 0)
rect_not_A_and_B = Rectangle(
width = p_of_not_A * sample_space_width,
height = p_of_B * sample_space_height,
stroke_width = 0,
fill_color = color_B,
fill_opacity = opacity_B
).next_to(rect_A_and_B, RIGHT, buff = 0)
rect_not_A_and_not_B = Rectangle(
width = p_of_not_A * sample_space_width,
height = p_of_not_B * sample_space_height,
stroke_width = 0,
fill_color = color_not_B,
fill_opacity = opacity_B
).next_to(rect_not_A_and_B, UP, buff = 0)
indep_formula.next_to(rect_not_A, LEFT, buff = 5)
#indep_formula.shift(UP)
self.play(Write(indep_formula))
self.play(
FadeIn(VGroup(
rect_A, rect_not_A, brace_A, label_A, brace_B, label_B,
rect_A_and_not_B, rect_not_A_and_B, rect_not_A_and_not_B,
rect_A_and_B,
label_A_and_B,
))
)
self.wait()
p_of_B_knowing_A = 0.6
rect_A_and_B.target = Rectangle(
width = p_of_A * sample_space_width,
height = p_of_B_knowing_A * sample_space_height,
stroke_width = 3,
fill_color = color_B,
fill_opacity = opacity_B
).align_to(rect_A_and_B, DOWN).align_to(rect_A_and_B, LEFT)
rect_A_and_not_B.target = Rectangle(
width = p_of_A * sample_space_width,
height = (1 - p_of_B_knowing_A) * sample_space_height,
stroke_width = 0,
fill_color = color_not_B,
fill_opacity = opacity_B
).next_to(rect_A_and_B.target, UP, buff = 0)
brace_B.target = Brace(rect_A_and_B.target, LEFT)
label_B.target = TexMobject("P(B\mid A)").scale(0.7).next_to(brace_B.target, LEFT)
self.play(
MoveToTarget(rect_A_and_B),
MoveToTarget(rect_A_and_not_B),
MoveToTarget(brace_B),
MoveToTarget(label_B),
label_A_and_B.move_to,rect_A_and_B.target
)
label_B_knowing_A = label_B
#self.play(FadeOut(label_B_copy))
self.remove(indep_formula.get_part_by_tex("P(B)"))
indep_formula.remove(indep_formula.get_part_by_tex("P(B)"))
label_B_knowing_A_copy = label_B_knowing_A.copy()
self.add(label_B_knowing_A_copy)
self.play(
label_B_knowing_A_copy.next_to, indep_formula.get_part_by_tex("\cdot"), RIGHT,
)
# solve formula for P(B|A)
rearranged_formula = TexMobject("P(B\mid A)", "=", "{P(A\\text{ and }B) \over P(A)}")
rearranged_formula.move_to(indep_formula)
self.wait()
self.play(
# in some places get_part_by_tex does not find the correct part
# so I picked out fitting indices
label_B_knowing_A_copy.move_to, rearranged_formula.get_part_by_tex("P(B\mid A)"),
label_A_copy.move_to, rearranged_formula[-1][10],
label_A_and_B_copy.move_to, rearranged_formula[-1][3],
indep_formula.get_part_by_tex("=").move_to, rearranged_formula.get_part_by_tex("="),
Transform(indep_formula.get_part_by_tex("\cdot"), rearranged_formula[2][8]),
)
rect = SurroundingRectangle(rearranged_formula, buff = 0.5 * MED_LARGE_BUFF)
self.play(ShowCreation(rect))
self.wait()

View File

@@ -1,113 +0,0 @@
from manimlib.imports import *
from old_projects.eoc.chapter8 import *
import scipy.special
class IllustrateAreaModelErf(GraphScene):
CONFIG = {
"x_min" : -3.0,
"x_max" : 3.0,
"y_min" : 0,
"y_max" : 1.0,
"num_rects": 400,
"y_axis_label" : "",
"x_axis_label" : "",
"variable_point_label" : "a",
"graph_origin": 2.5 * DOWN + 4 * RIGHT,
"x_axis_width": 5,
"y_axis_height": 5
}
def construct(self):
# integral bounds
x_min_1 = -0.0001
x_max_1 = 0.0001
x_min_2 = self.x_min
x_max_2 = self.x_max
self.setup_axes()
self.remove(self.x_axis, self.y_axis)
graph = self.get_graph(lambda x: np.exp(-x**2) * 2.0 / TAU ** 0.5)
area = self.area = self.get_area(graph, x_min_1, x_max_1)
pdf_formula = TexMobject("p(x) = {1\over \sigma\sqrt{2\pi}}e^{-{1\over 2}({x\over\sigma})^2}")
pdf_formula.set_color(graph.color)
cdf_formula = TexMobject("P(|X| < ", "a", ") = \int", "_{-a}", "^a", "p(x) dx")
cdf_formula.set_color_by_tex("a", YELLOW)
cdf_formula.next_to(graph, LEFT, buff = 2)
pdf_formula.next_to(cdf_formula, UP)
formulas = VGroup(pdf_formula, cdf_formula)
self.play(Write(pdf_formula))
self.play(Write(cdf_formula))
self.wait()
self.play(ShowCreation(self.x_axis))
self.play(ShowCreation(graph))
self.play(FadeIn(area))
self.v_graph = graph
self.add_T_label(
x_min_1,
label = "-a",
side = LEFT,
color = YELLOW,
animated = False
)
self.add_T_label(
x_max_1,
label = "a",
side = RIGHT,
color = YELLOW,
animated = False
)
# don't show the labels just yet
self.remove(
self.left_T_label_group[0],
self.right_T_label_group[0],
)
def integral_update_func(t):
return scipy.special.erf(
self.point_to_coords(self.right_v_line.get_center())[0]
)
def integral_update_func_percent(t):
return 100 * integral_update_func(t)
equals_sign = TexMobject("=").next_to(cdf_formula, buff = MED_LARGE_BUFF)
cdf_value = DecimalNumber(0, color = graph.color, num_decimal_places = 3)
cdf_value.next_to(equals_sign)
self.play(
FadeIn(equals_sign),
FadeIn(cdf_value)
)
self.add_foreground_mobject(cdf_value)
cdf_percentage = DecimalNumber(0, unit = "\\%")
cdf_percentage.move_to(self.coords_to_point(0,0.2))
self.add_foreground_mobject(cdf_percentage)
cdf_value.add_updater(
lambda m: m.set_value(integral_update_func())
)
anim = self.get_animation_integral_bounds_change(
graph, x_min_2, x_max_2,
run_time = 3)
self.play(
anim
)
rect = SurroundingRectangle(formulas, buff = 0.5 * MED_LARGE_BUFF)
self.play(ShowCreation(rect))

View File

@@ -1,93 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class IllustrateAreaModelExpectation(Scene):
def construct(self):
formula = TexMobject("E[X] = \sum_{i=1}^N p_i x_i").move_to(3 * LEFT + UP)
self.play(Write(formula))
x_scale = 5.0
y_scale = 1.0
probabilities = np.array([1./8, 3./8, 3./8, 1./8])
prob_strings = ["{1\over 8}","{3\over 8}","{3\over 8}","{1\over 8}"]
cumulative_probabilities = np.cumsum(probabilities)
cumulative_probabilities = np.insert(cumulative_probabilities, 0, 0)
y_values = np.array([0, 1, 2, 3])
hist = Histogram(probabilities, y_values,
mode = "widths",
x_scale = x_scale,
y_scale = y_scale,
x_labels = "none"
)
flat_hist = Histogram(probabilities, 0 * y_values,
mode = "widths",
x_scale = x_scale,
y_scale = y_scale,
x_labels = "none"
)
self.play(FadeIn(flat_hist))
self.play(
ReplacementTransform(flat_hist, hist)
)
braces = VGroup()
p_labels = VGroup()
# add x labels (braces)
for (p,string,bar) in zip(probabilities, prob_strings,hist.bars):
brace = Brace(bar, DOWN, buff = 0.1)
p_label = TexMobject(string).next_to(brace, DOWN, buff = SMALL_BUFF).scale(0.7)
group = VGroup(brace, p_label)
braces.add(brace)
p_labels.add(p_label)
self.play(
LaggedStartMap(FadeIn,braces),
LaggedStartMap(FadeIn, p_labels)
)
y_average = np.mean(y_values)
averaged_y_values = y_average * np.ones(np.shape(y_values))
averaged_hist = flat_hist = Histogram(probabilities, averaged_y_values,
mode = "widths",
x_scale = x_scale,
y_scale = y_scale,
x_labels = "none",
y_labels = "none"
).fade(0.2)
ghost_hist = hist.copy().fade(0.8)
self.bring_to_back(ghost_hist)
self.play(Transform(hist, averaged_hist, run_time = 3))
self.wait()
average_brace = Brace(averaged_hist, RIGHT, buff = 0.1)
average_label = TexMobject(str(y_average)).scale(0.7)
average_label.next_to(average_brace, RIGHT, SMALL_BUFF)
average_group = VGroup(average_brace, average_label)
one_brace = Brace(averaged_hist, DOWN, buff = 0.1)
one_p_label = TexMobject(str(1)).next_to(one_brace, DOWN, buff = SMALL_BUFF).scale(0.7)
one_group = VGroup(one_brace, one_p_label)
self.play(
FadeIn(average_group),
Transform(braces, one_brace),
Transform(p_labels, one_p_label),
)
rect = SurroundingRectangle(formula, buff = 0.5 * MED_LARGE_BUFF)
self.play(ShowCreation(rect))

File diff suppressed because it is too large Load Diff

View File

@@ -1,164 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
from active_projects.eop.chapter1.brick_row_scene import BrickRowScene
class EntireBrickWall(BrickRowScene, MovingCameraScene):
def setup(self):
super(BrickRowScene, self).setup()
super(PiCreatureScene, self).setup()
def construct(self):
self.remove(self.get_primary_pi_creature())
row_height = 0.3
nb_rows = 20
start_point = 3 * UP + 1 * LEFT
rows = VMobject()
rows.add(BrickRow(0, height = row_height))
rows.move_to(start_point)
self.add(rows)
zero_counter = Integer(0).next_to(start_point + 0.5 * rows[0].width * RIGHT)
nb_flips_text = TextMobject("\# of flips")
nb_flips_text.next_to(zero_counter, RIGHT, buff = LARGE_BUFF)
self.add(zero_counter, nb_flips_text)
flip_counters = VGroup(zero_counter)
for i in range(1, nb_rows + 1):
rows.add(rows[-1].copy())
self.bring_to_back(rows[-1])
anims = [
rows[-1].shift, row_height * DOWN,
Animation(rows[-2])
]
if i % 5 == 0:
counter = Integer(i)
counter.next_to(rows[-1].get_right() + row_height * DOWN, RIGHT)
flip_counters.add(counter)
anims.append(FadeIn(counter))
self.play(*anims)
self.play(SplitRectsInBrickWall(rows[-1]))
rows.submobjects[-1] = self.merge_rects_by_subdiv(rows[-1])
rows.submobjects[-1] = self.merge_rects_by_coloring(rows[-1])
# draw indices under the last row for the number of tails
tails_counters = VGroup()
for (i, rect) in enumerate(rows[-1].rects):
if i < 6 or i > 14:
continue
if i == 6:
counter = TexMobject("\dots", color = COLOR_TAILS)
counter.next_to(rect, DOWN, buff = 1.5 * MED_SMALL_BUFF)
elif i == 14:
counter = TexMobject("\dots", color = COLOR_TAILS)
counter.next_to(rect, DOWN, buff = 1.5 * MED_SMALL_BUFF)
counter.shift(0.2 * RIGHT)
else:
counter = Integer(i, color = COLOR_TAILS)
counter.next_to(rect, DOWN)
tails_counters.add(counter)
nb_tails_text = TextMobject("\# of tails", color = COLOR_TAILS)
nb_tails_text.next_to(tails_counters[-1], RIGHT, buff = LARGE_BUFF)
self.play(
LaggedStartMap(FadeIn, tails_counters),
FadeIn(nb_tails_text)
)
# remove any hidden brick rows
self.clear()
self.add(nb_flips_text)
mobs_to_shift = VGroup(
rows, flip_counters, tails_counters, nb_tails_text,
)
self.play(mobs_to_shift.shift, 3 * UP)
last_row_rect = SurroundingRectangle(rows[-1], buff = 0)
last_row_rect.set_stroke(color = YELLOW, width = 6)
rows.save_state()
self.play(
rows.fade, 0.9,
ShowCreation(last_row_rect)
)
def highlighted_brick(row = 20, nb_tails = 10):
brick_copy = rows[row].rects[nb_tails].copy()
brick_copy.set_fill(color = YELLOW, opacity = 0.8)
prob_percentage = float(choose(row, nb_tails)) / 2**row * 100
brick_label = DecimalNumber(prob_percentage,
unit = "\%", num_decimal_places = 1, color = BLACK)
brick_label.move_to(brick_copy)
brick_label.set_height(0.8 * brick_copy.get_height())
return VGroup(brick_copy, brick_label)
highlighted_bricks = [
highlighted_brick(row = 20, nb_tails = i)
for i in range(20)
]
self.wait()
self.play(
FadeIn(highlighted_bricks[10])
)
self.wait()
self.play(
FadeOut(highlighted_bricks[10]),
FadeIn(highlighted_bricks[9]),
FadeIn(highlighted_bricks[11]),
)
self.wait()
self.play(
FadeOut(highlighted_bricks[9]),
FadeOut(highlighted_bricks[11]),
FadeIn(highlighted_bricks[8]),
FadeIn(highlighted_bricks[12]),
)
self.wait()
self.play(
FadeOut(highlighted_bricks[8]),
FadeOut(highlighted_bricks[12]),
FadeOut(last_row_rect),
rows.restore,
)
self.wait()
new_frame = self.camera_frame.copy()
new_frame.scale(0.0001).move_to(rows.get_corner(DR))
self.play(
Transform(self.camera_frame, new_frame,
run_time = 9,
rate_func = exponential_decay
)
)

View File

@@ -1,55 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class Chapter1OpeningQuote(OpeningQuote):
CONFIG = {
"fade_in_kwargs": {
"lag_ratio": 0.5,
"rate_func": linear,
"run_time": 10,
},
"text_size" : "\\normalsize",
"use_quotation_marks": False,
"quote" : [
"To see a world in a grain of sand\\\\",
"And a heaven in a wild flower,\\\\",
"Hold infinity in the palm of your hand\\\\",
"\phantom{r}And eternity in an hour.\\\\"
],
"quote_arg_separator" : " ",
"highlighted_quote_terms" : {},
"author" : "William Blake: \\\\ \emph{Auguries of Innocence}",
}
class Introduction(TeacherStudentsScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": True,
},
}
def construct(self):
self.wait(5)
self.change_student_modes(
"confused", "frustrated", "dejected",
look_at_arg = UP + 2 * RIGHT
)
self.wait()
self.play(
self.get_teacher().change_mode,"raise_right_hand"
)
self.wait()
self.wait(30)
# put examples here in video editor
# # # # # # # # # # # # # # # # # #
# show examples of the area model #
# # # # # # # # # # # # # # # # # #

View File

@@ -1,39 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class JustFlipping(Scene):
def construct(self):
randy = CoinFlippingPiCreature(color = MAROON_E, flip_height = 1).shift(2 * DOWN)
self.add(randy)
self.wait(2)
for i in range(10):
self.wait()
self.play(FlipCoin(randy))
class JustFlippingWithResults(Scene):
def construct(self):
randy = CoinFlippingPiCreature(color = MAROON_E, flip_height = 1).shift(2 * DOWN)
self.add(randy)
self.wait(2)
for i in range(10):
self.wait()
self.play(FlipCoin(randy))
result = random.choice(["H", "T"])
if result == "H":
coin = UprightHeads().scale(3)
else:
coin = UprightTails().scale(3)
coin.move_to(2 * UP + 2.5 * LEFT + i * 0.6 * RIGHT)
self.play(FadeIn(coin))

View File

@@ -1,118 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class MillionFlips(Scene):
def construct(self):
title = TextMobject("1{,}000{,}000 flips")
title.to_edge(UP)
self.add(title)
small_wait_time = 1.0 / 15 # Um...
n_flips_label = TextMobject("\\# Flips: ")
n_heads_label = TextMobject("\\# Heads: ")
n_flips_count = Integer(0)
n_heads_count = Integer(0)
n_heads_label.to_edge(RIGHT, buff=2 * LARGE_BUFF)
n_flips_label.next_to(n_heads_label, DOWN, aligned_edge=LEFT)
n_flips_count.next_to(n_flips_label[-1], RIGHT)
n_heads_count.next_to(n_heads_label[-1], RIGHT)
VGroup(n_flips_count, n_heads_count).shift(0.5 * SMALL_BUFF * UP)
self.add(n_flips_label, n_heads_label, n_flips_count, n_heads_count)
coins = VGroup(*[
FlatHeads() if random.random() < 0.5 else FlatTails()
for x in range(100)
])
self.organize_group(coins)
proportions = np.random.normal(0.5, 0.5 * 0.1, 100)
hundred_boxes = VGroup(*[
Square(
stroke_width=1,
stroke_color=WHITE,
fill_opacity=1,
fill_color=interpolate_color(COLOR_HEADS, COLOR_TAILS, prop)
)
for prop in proportions
])
self.organize_group(hundred_boxes)
ten_k_proportions = np.random.normal(0.5, 0.5 * 0.01, 100)
ten_k_boxes = VGroup(*[
Square(
stroke_width=1,
stroke_color=WHITE,
fill_opacity=1,
fill_color=interpolate_color(COLOR_HEADS, COLOR_TAILS, prop)
)
for prop in ten_k_proportions
])
self.organize_group(ten_k_boxes)
# Animations
for coin in coins:
self.add(coin)
self.increment(n_flips_count)
if isinstance(coin, FlatHeads):
self.increment(n_heads_count)
self.wait(small_wait_time)
self.play(
FadeIn(hundred_boxes[0]),
coins.set_stroke, {"width": 0},
coins.replace, hundred_boxes[0]
)
hundred_boxes[0].add(coins)
for box, prop in list(zip(hundred_boxes, proportions))[1:]:
self.add(box)
self.increment(n_flips_count, 100)
self.increment(n_heads_count, int(np.round(prop * 100)))
self.wait(small_wait_time)
self.play(
FadeIn(ten_k_boxes[0]),
hundred_boxes.set_stroke, {"width": 0},
hundred_boxes.replace, ten_k_boxes[0]
)
ten_k_boxes[0].add(hundred_boxes)
for box, prop in list(zip(ten_k_boxes, ten_k_proportions))[1:]:
self.add(box)
self.increment(n_flips_count, 10000)
self.increment(n_heads_count, int(np.round(prop * 10000)))
self.wait(small_wait_time)
self.wait()
def organize_group(self, group):
group.arrange_in_grid(10)
group.set_height(5)
group.shift(DOWN + 2 * LEFT)
def increment(self, integer_mob, value=1):
new_int = Integer(integer_mob.number + value)
new_int.move_to(integer_mob, DL)
integer_mob.number += value
integer_mob.submobjects = new_int.submobjects
class PropHeadsWithinThousandth(Scene):
def construct(self):
prob = TexMobject(
"P(499{,}000 \\le", "\\# \\text{H}", "\\le 501{,}000)",
"\\approx", "0.9545",
)
prob[1].set_color(RED)
prob[-1].set_color(YELLOW)
self.add(prob)
class PropHeadsWithinHundredth(Scene):
def construct(self):
prob = TexMobject(
"P(490{,}000 \\le", "\\# \\text{H}", "\\le 510{,}000)",
"\\approx", "0.99999999\\dots",
)
prob[1].set_color(RED)
prob[-1].set_color(YELLOW)
self.add(prob)

View File

@@ -1,299 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class GenericMorphBrickRowIntoHistogram(Scene):
CONFIG = {
"level" : 3,
"bar_width" : 2.0,
"bar_anchor_height" : -3.0,
"show_tallies" : False,
"show_nb_flips" : True
}
def construct(self):
self.row = BrickRow(self.level, height = self.bar_width, width = 10)
self.bars = OutlineableBars(*[self.row.rects[i] for i in range(self.level + 1)])
self.bar_anchors = [self.bar_anchor_height * UP + self.row.height * (i - 0.5 * self.level) * RIGHT for i in range(self.level + 1)]
self.add(self.row)
if self.show_tallies:
tallies = VMobject()
for (i,brick) in enumerate(self.row.rects):
tally = TallyStack(self.level - i, i)
tally.move_to(brick)
self.add(tally)
tallies.add(tally)
brick.set_stroke(width = 3)
if self.show_nb_flips:
nb_flips_text = TextMobject("\# of flips: " + str(self.level))
nb_flips_text.to_corner(UR)
self.add(nb_flips_text)
self.remove(self.row.subdivs, self.row.border)
for rect in self.row.rects:
rect.set_stroke(color = WHITE, width = 3)
self.wait()
self.play(
self.row.rects.space_out_submobjects, {"factor" : 1.3},
FadeOut(tallies)
)
self.wait()
anims = []
for brick in self.row.rects:
anims.append(brick.rotate)
anims.append(TAU/4)
self.play(*anims)
self.wait()
anims = []
for (i,brick) in enumerate(self.row.rects):
anims.append(brick.next_to)
anims.append(self.bar_anchors[i])
anims.append({"direction" : UP, "buff" : 0})
self.play(*anims)
self.wait()
self.bars.create_outline()
anims = [
ApplyMethod(rect.set_stroke, {"width" : 0})
for rect in self.bars
]
anims.append(FadeIn(self.bars.outline))
self.play(*anims)
self.wait()
class MorphBrickRowIntoHistogram3(GenericMorphBrickRowIntoHistogram):
CONFIG = {
"level" : 3,
"prob_denominator" : 8,
"bar_width" : 2.0,
"bar_anchor_height" : -3.0,
"show_tallies" : True,
"show_nb_flips" : False
}
def construct(self):
super(MorphBrickRowIntoHistogram3,self).construct()
# draw x-axis
x_axis = Line(ORIGIN, 10 * RIGHT, color = WHITE, buff = 0)
x_axis.next_to(self.bars, DOWN, buff = 0)
#x_labels = VMobject(*[TexMobject(str(i)) for i in range(4)])
x_labels = VMobject()
for (i, bar) in enumerate(self.bars):
label = Integer(i)
label.next_to(self.bar_anchors[i], DOWN)
x_labels.add(label)
nb_tails_label = TextMobject("\# of tails")
nb_tails_label.next_to(x_labels[-1], RIGHT, MED_LARGE_BUFF)
# draw y-guides
y_guides = VMobject()
for i in range(0,self.prob_denominator + 1):
y_guide = Line(5 * LEFT, 5 * RIGHT, stroke_color = GRAY)
y_guide.move_to(self.bar_anchor_height * UP + i * float(self.row.width) / self.prob_denominator * UP)
y_guide_label = TexMobject("{" + str(i) + "\over " + str(self.prob_denominator) + "}", color = GRAY)
y_guide_label.scale(0.7)
y_guide_label.next_to(y_guide, LEFT)
if i != 0:
y_guide.add(y_guide_label)
y_guides.add(y_guide)
self.wait()
self.play(
FadeIn(y_guides),
Animation(self.bars.outline),
Animation(self.bars)
)
self.wait()
self.play(
FadeIn(x_axis),
FadeIn(x_labels),
FadeIn(nb_tails_label)
)
self.add_foreground_mobject(nb_tails_label)
area_color = YELLOW
total_area_text = TextMobject("total area =", color = area_color)
area_decimal = DecimalNumber(0, color = area_color, num_decimal_places = 3)
area_decimal.next_to(total_area_text, RIGHT)
total_area_group = VGroup(total_area_text, area_decimal)
total_area_group.move_to(2.7 * UP)
self.wait()
self.play(
FadeIn(total_area_text),
)
self.wait()
cumulative_areas = [0.125, 0.5, 0.875, 1]
covering_rects = self.bars.copy()
for (i,rect) in enumerate(covering_rects):
rect.set_fill(color = area_color, opacity = 0.5)
self.play(
FadeIn(rect, rate_func = linear),
ChangeDecimalToValue(area_decimal, cumulative_areas[i],
rate_func = linear)
)
self.wait(0.2)
self.wait()
total_area_rect = SurroundingRectangle(
total_area_group,
buff = MED_SMALL_BUFF,
stroke_color = area_color
)
self.play(
FadeOut(covering_rects),
ShowCreation(total_area_rect)
)
self.wait()
class MorphBrickRowIntoHistogram20(GenericMorphBrickRowIntoHistogram):
CONFIG = {
"level" : 20,
"prob_ticks" : 0.05,
"bar_width" : 0.5,
"bar_anchor_height" : -3.0,
"x_ticks": 5
}
def construct(self):
super(MorphBrickRowIntoHistogram20, self).construct()
x_axis = Line(ORIGIN, 10 * RIGHT, color = WHITE, buff = 0)
x_axis.next_to(self.bars, DOWN, buff = 0)
#x_labels = VMobject(*[TexMobject(str(i)) for i in range(4)])
x_labels = VMobject()
for (i, bar) in enumerate(self.bars):
if i % self.x_ticks != 0:
continue
label = Integer(i)
label.next_to(self.bar_anchors[i], DOWN)
x_labels.add(label)
nb_tails_label = TextMobject("\# of tails")
nb_tails_label.move_to(5 * RIGHT + 2.5 * DOWN)
self.wait()
self.play(
FadeIn(x_axis),
FadeIn(x_labels),
FadeIn(nb_tails_label)
)
self.wait()
# draw y-guides
max_prob = float(choose(self.level, self.level/2)) / 2 ** self.level
y_guides = VMobject()
y_guide_heights = []
prob_grid = np.arange(self.prob_ticks, 1.3 * max_prob, self.prob_ticks)
for i in prob_grid:
y_guide = Line(5 * LEFT, 5 * RIGHT, stroke_color = GRAY)
y_guide_height = self.bar_anchor_height + i * float(self.row.width)
y_guide_heights.append(y_guide_height)
y_guide.move_to(y_guide_height * UP)
y_guide_label = DecimalNumber(i, num_decimal_places = 2, color = GRAY)
y_guide_label.scale(0.7)
y_guide_label.next_to(y_guide, LEFT)
y_guide.add(y_guide_label)
y_guides.add(y_guide)
self.bring_to_back(y_guides)
self.play(FadeIn(y_guides), Animation(self.bars))
self.wait()
histogram_width = self.bars.get_width()
histogram_height = self.bars.get_height()
# scale to fit screen
self.scale_x = 10.0/((len(self.bars) - 1) * self.bar_width)
self.scale_y = 6.0/histogram_height
anims = []
for (bar, x_label) in zip(self.bars, x_labels):
v = (self.scale_x - 1) * x_label.get_center()[0] * RIGHT
anims.append(x_label.shift)
anims.append(v)
anims.append(self.bars.stretch_about_point)
anims.append(self.scale_x)
anims.append(0)
anims.append(ORIGIN)
anims.append(self.bars.outline.stretch_about_point)
anims.append(self.scale_x)
anims.append(0)
anims.append(ORIGIN)
self.play(*anims)
self.wait()
anims = []
for (guide, i, h) in zip(y_guides, prob_grid, y_guide_heights):
new_y_guide_height = self.bar_anchor_height + i * self.scale_y * float(self.row.width)
v = (new_y_guide_height - h) * UP
anims.append(guide.shift)
anims.append(v)
anims.append(self.bars.stretch_about_point)
anims.append(self.scale_y)
anims.append(1)
anims.append(self.bars.get_bottom())
anims.append(self.bars.outline.stretch_about_point)
anims.append(self.scale_y)
anims.append(1)
anims.append(self.bars.get_bottom())
self.play(*anims)
self.wait()
class MorphBrickRowIntoHistogram100(MorphBrickRowIntoHistogram20):
CONFIG = {
"level" : 100,
"x_ticks": 20,
"prob_ticks": 0.02
}
class MorphBrickRowIntoHistogram500(MorphBrickRowIntoHistogram20):
CONFIG = {
"level" : 500,
"x_ticks": 100,
"prob_ticks": 0.01
}

View File

@@ -1,321 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class ProbabilityDistributions(PiCreatureScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": False,
},
}
def construct(self):
lag_ratio = 0.2
run_time = 3
# WEATHER FORECAST
unit_rect = Rectangle(
height = 3, width = 3
).shift(DOWN)
p_rain = 0.23
p_sun = 1 - p_rain
opacity = 0.7
rain_rect = unit_rect.copy().stretch(p_rain, 0)
rain_rect.align_to(unit_rect, LEFT)
rain_rect.set_fill(color = BLUE, opacity = opacity)
rain_rect.set_stroke(width = 0)
sun_rect = unit_rect.copy().stretch(p_sun, 0)
sun_rect.next_to(rain_rect, RIGHT, buff = 0)
sun_rect.set_fill(color = YELLOW, opacity = opacity)
sun_rect.set_stroke(width = 0)
self.add(unit_rect, rain_rect, sun_rect)
rain = SVGMobject(file_name = "rain").scale(0.25)
sun = SVGMobject(file_name = "sun").scale(0.35)
rain.flip().move_to(rain_rect)
sun.move_to(sun_rect)
self.add(rain, sun)
text_scale = 0.7
brace_rain = Brace(rain_rect, UP)
p_rain_label = TextMobject("$P($rain$)=$").scale(text_scale)
p_rain_decimal = DecimalNumber(p_rain).scale(text_scale)
p_rain_decimal.next_to(p_rain_label)
p_rain_whole_label = VGroup(p_rain_label, p_rain_decimal)
p_rain_whole_label.next_to(brace_rain, UP)
brace_sun = Brace(sun_rect, DOWN)
p_sun_label = TextMobject("$P($sunshine$)=$").scale(text_scale)
p_sun_decimal = DecimalNumber(p_sun).scale(text_scale)
p_sun_decimal.next_to(p_sun_label)
p_sun_whole_label = VGroup(p_sun_label, p_sun_decimal)
p_sun_whole_label.next_to(brace_sun, DOWN)
self.add(brace_rain, p_rain_whole_label, brace_sun, p_sun_whole_label)
self.wait(6)
# new_p_rain = 0.68
# new_p_sun = 1 - new_p_rain
# new_rain_rect = unit_rect.copy().stretch(new_p_rain, 0)
# new_rain_rect.align_to(unit_rect, LEFT)
# new_rain_rect.set_fill(color = BLUE, opacity = opacity)
# new_rain_rect.set_stroke(width = 0)
# new_sun_rect = unit_rect.copy().stretch(new_p_sun, 0)
# new_sun_rect.next_to(new_rain_rect, RIGHT, buff = 0)
# new_sun_rect.set_fill(color = YELLOW, opacity = opacity)
# new_sun_rect.set_stroke(width = 0)
# new_rain = SVGMobject(file_name = "rain").scale(0.35)
# new_sun = SVGMobject(file_name = "sun").scale(0.35)
# new_rain.flip().move_to(new_rain_rect)
# new_sun.move_to(new_sun_rect)
# new_brace_rain = Brace(new_rain_rect, UP)
# new_p_rain_label = TextMobject("$P($rain$)=$").scale(text_scale)
# new_p_rain_decimal = DecimalNumber(new_p_rain).scale(text_scale)
# new_p_rain_decimal.next_to(new_p_rain_label)
# new_p_rain_whole_label = VGroup(new_p_rain_label, new_p_rain_decimal)
# new_p_rain_whole_label.next_to(new_brace_rain, UP)
# new_brace_sun = Brace(new_sun_rect, DOWN)
# new_p_sun_label = TextMobject("$P($sunshine$)=$").scale(text_scale)
# new_p_sun_decimal = DecimalNumber(new_p_sun).scale(text_scale)
# new_p_sun_decimal.next_to(new_p_sun_label)
# new_p_sun_whole_label = VGroup(new_p_sun_label, new_p_sun_decimal)
# new_p_sun_whole_label.next_to(new_brace_sun, DOWN)
# def rain_update_func(alpha):
# return alpha * new_p_rain + (1 - alpha) * p_rain
# def sun_update_func(alpha):
# return 1 - rain_update_func(alpha)
# update_p_rain = ChangingDecimal(
# p_rain_decimal, rain_update_func,
# tracked_mobject = p_rain_label,
# run_time = run_time
# )
# update_p_sun = ChangingDecimal(
# p_sun_decimal, sun_update_func,
# tracked_mobject = p_sun_label,
# run_time = run_time
# )
# self.play(
# Transform(rain_rect, new_rain_rect, run_time = run_time),
# Transform(sun_rect, new_sun_rect, run_time = run_time),
# Transform(rain, new_rain, run_time = run_time),
# Transform(sun, new_sun, run_time = run_time),
# Transform(brace_rain, new_brace_rain, run_time = run_time),
# Transform(brace_sun, new_brace_sun, run_time = run_time),
# Transform(p_rain_label, new_p_rain_label, run_time = run_time),
# Transform(p_sun_label, new_p_sun_label, run_time = run_time),
# update_p_rain,
# update_p_sun
# )
# move the forecast into a corner
forecast = VGroup(
rain_rect, sun_rect, rain, sun, brace_rain, brace_sun,
p_rain_whole_label, p_sun_whole_label, unit_rect
)
forecast.target = forecast.copy().scale(0.5)
forecast.target.to_corner(UL)
self.play(MoveToTarget(forecast))
self.play(
FadeOut(brace_rain),
FadeOut(brace_sun),
FadeOut(p_rain_whole_label),
FadeOut(p_sun_whole_label),
)
self.wait(3)
# DOUBLE DICE THROW
cell_size = 0.5
dice_table = TwoDiceTable(cell_size = cell_size, label_scale = 0.7)
dice_table.shift(0.8 * DOWN)
dice_unit_rect = SurroundingRectangle(
dice_table.cells, buff = 0,
stroke_color=WHITE
)
dice_table_grouped_cells = VGroup()
for i in range(6):
dice_table_grouped_cells.add(VGroup(*[
VGroup(
dice_table.cells[6 * i - 5 * k],
dice_table.labels[6 * i - 5 * k],
)
for k in range(i + 1)
]))
for i in range(5):
dice_table_grouped_cells.add(VGroup(*[
VGroup(
dice_table.cells[31 + i - 5 * k],
dice_table.labels[31 + i - 5 * k],
)
for k in range(5 - i)
]))
# self.play(
# FadeIn(dice_unit_rect),
# FadeIn(dice_table.rows)
# )
# for (cell, label) in zip(dice_table.cells, dice_table.labels):
# cell.add(label)
# self.play(
# LaggedStartMap(FadeIn, dice_table_grouped_cells,
# lag_ratio = lag_ratio, run_time = run_time)
# )
self.play(
FadeIn(dice_table_grouped_cells),
FadeIn(dice_unit_rect),
FadeIn(dice_table.rows)
)
self.wait(3)
self.play(
dice_table_grouped_cells.space_out_submobjects, {"factor" : 1.5},
rate_func=there_and_back_with_pause,
run_time=run_time
)
dice_table.add(dice_unit_rect)
dice_table_target = dice_table.deepcopy()
dice_table_target.scale(0.5)
dice_table_target.to_corner(UR, buff=LARGE_BUFF)
dice_table_target.shift(0.4 * UP)
self.play(Transform(dice_table, dice_table_target))
self.play(
FadeOut(dice_table.rows),
FadeOut(dice_unit_rect),
)
self.wait(3)
# TITLE
text = TextMobject("Probability distributions")
text.to_edge(UP)
text_rect = SurroundingRectangle(text, buff=MED_SMALL_BUFF)
text_rect.match_color(text)
self.play(
FadeIn(text),
ShowCreation(text_rect)
)
self.wait(3)
# COIN FLIP
brick_row = BrickRow(3, height = 2, width = 10)
coin_flip_rect = VGroup(brick_row)
tallies = VGroup()
for (i, brick) in enumerate(brick_row.rects):
tally = TallyStack(3 - i, i)
tally.move_to(brick)
tallies.add(tally)
coin_flip_rect.add(tallies)
coin_flip_rect.scale(0.65).shift(RIGHT)
self.play(FadeIn(coin_flip_rect))
counts = [1, 3, 3, 1]
braces = VGroup()
labels = VGroup()
for (rect, count) in zip(brick_row.rects, counts):
label = TexMobject("{" + str(count) + "\\over 8}").scale(0.5)
brace = Brace(rect, DOWN)
label.next_to(brace, DOWN)
braces.add(brace)
labels.add(label)
self.play(
FadeIn(braces),
FadeIn(labels)
)
coin_flip_rect.add(braces, labels)
self.wait(6)
outcomes = brick_row.get_outcome_rects_for_level(3, with_labels = True,
inset = True)
outcomes.scale(0.65)
outcomes.move_to(brick_row.get_center())
outcome_braces = VGroup(*[
Brace(outcome, DOWN) for outcome in outcomes
])
outcome_labels = VGroup(*[
TexMobject("{1\over 8}").scale(0.5).next_to(brace, DOWN)
for brace in outcome_braces
])
self.play(
FadeOut(tallies),
FadeIn(outcomes),
FadeOut(braces),
FadeOut(labels),
FadeIn(outcome_braces),
FadeIn(outcome_labels)
)
self.wait(10)

View File

@@ -1,278 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
from active_projects.eop.independence import *
from for_3b1b_videos.pi_class import PiCreatureClass
class QuizResult(PiCreatureScene):
CONFIG = {
"pi_creatures_start_on_screen" : False,
"random_seed" : 0
}
def construct(self):
def get_example_quiz():
quiz = get_quiz(
"Define ``Brachistochrone'' ",
"Define ``Tautochrone'' ",
"Define ``Cycloid'' ",
)
rect = SurroundingRectangle(quiz, buff = 0)
rect.set_fill(color = BLACK, opacity = 1)
rect.set_stroke(width = 0)
quiz.add_to_back(rect)
return quiz
highlight_color = WHITE
nb_students_x = 5
nb_students_y = 3
spacing_students_x = 2.0
spacing_students_y = 2.2
all_students = PiCreatureClass(
width = nb_students_x, height = nb_students_y)# VGroup()
student_points = []
grades = []
grades_count = []
hist_y_values = np.zeros(4)
for i in range(nb_students_x):
for j in range(nb_students_y):
x = i * spacing_students_x
y = j * spacing_students_y
#pi = PiCreature().scale(0.3)
#pi.move_to([x,y,0])
#all_students.add(pi)
all_students[i*nb_students_y + j].move_to([x,y,0])
q1 = np.random.choice([True, False])
q2 = np.random.choice([True, False])
q3 = np.random.choice([True, False])
student_points.append([q1, q2, q3])
grade = q1*1+q2*1+q3*1
grades.append(grade)
hist_y_values[grade] += 1
# How many times has this grade already occured?
grade_count = grades.count(grade)
grades_count.append(grade_count)
all_students.move_to(ORIGIN)
self.pi_creatures = all_students
self.play(FadeIn(all_students))
all_quizzes = VGroup()
quiz = get_example_quiz().scale(0.2)
for pi in all_students:
quiz_copy = quiz.copy()
quiz_copy.next_to(pi, UP)
all_quizzes.add(quiz_copy)
master_quiz = get_example_quiz()
self.play(Write(master_quiz), run_time = 2)
self.wait()
self.play(ReplacementTransform(
VGroup(master_quiz), all_quizzes,
run_time=2,
lag_ratio=0.5
))
self.wait(2)
grades_mob = VGroup()
for (pi, quiz, grade) in zip(all_students, all_quizzes, grades):
grade_mob = TexMobject(str(grade) + "/3")
grade_mob.move_to(quiz)
grades_mob.add(grade_mob)
self.remove(master_quiz)
self.wait()
self.play(
FadeOut(all_quizzes),
FadeIn(grades_mob)
)
# self.play(
# all_students[2:].fade, 0.8,
# grades_mob[2:].fade, 0.8
# )
students_points_mob = VGroup()
for (pi, quiz, points) in zip(all_students, all_quizzes, student_points):
slot = get_slot_group(points, include_qs = False)
slot.scale(0.5).move_to(quiz)
students_points_mob.add(slot)
self.wait()
self.play(
#all_students.fade, 0,
FadeOut(grades_mob),
FadeIn(students_points_mob)
)
all_students.save_state()
students_points_mob.save_state()
self.wait()
randy = all_students[0]
morty = all_students[nb_students_y]
all_other_students = VGroup(*all_students)
all_other_students.remove(randy, morty)
randy_points = students_points_mob[0]
morty_points = students_points_mob[nb_students_y]
all_other_points = VGroup(*students_points_mob)
all_other_points.remove(randy_points, morty_points)
self.play(
all_other_students.fade, 0.8,
all_other_points.fade, 0.8,
)
self.wait()
scale = 1.5
self.play(randy_points.scale,scale)
self.play(randy_points.scale,1.0/scale, morty_points.scale,scale)
self.play(morty_points.scale,1.0/scale)
self.wait()
self.play(
all_students.restore,
students_points_mob.restore,
)
self.wait()
anims = []
for points in students_points_mob:
anims.append(points.scale)
anims.append(scale)
self.play(*anims)
self.wait()
anims = []
for points in students_points_mob:
anims.append(points.scale)
anims.append(1.0/scale)
self.play(*anims)
anims = []
anchor_point = 3 * DOWN + 1 * LEFT
for (pi, grade, grades_count) in zip(all_students, grades, grades_count):
anims.append(pi.move_to)
anims.append(anchor_point + grade * RIGHT + grades_count * UP)
anims.append(FadeOut(students_points_mob))
self.wait()
self.play(*anims)
grade_labels = VGroup()
for i in range(4):
grade_label = Integer(i, color = highlight_color)
grade_label.move_to(i * RIGHT)
grade_labels.add(grade_label)
grade_labels.next_to(all_students, DOWN)
out_of_label = TextMobject("out of 3", color = highlight_color)
out_of_label.next_to(grade_labels, RIGHT, buff = MED_LARGE_BUFF)
grade_labels.add(out_of_label)
self.wait()
self.play(Write(grade_labels))
grade_hist = Histogram(
np.ones(4),
hist_y_values,
mode = "widths",
x_labels = "none",
y_label_position = "center",
bar_stroke_width = 0,
outline_stroke_width = 5
)
grade_hist.move_to(all_students)
self.wait()
self.play(
FadeIn(grade_hist),
FadeOut(all_students)
)
nb_students_label = TextMobject("\# of students", color = highlight_color)
nb_students_label.move_to(5 * RIGHT + 1 * UP)
arrows = VGroup(*[
Arrow(nb_students_label.get_left(), grade_hist.bars[i].get_center(),
color = highlight_color)
for i in range(4)
])
self.wait()
self.play(Write(nb_students_label), LaggedStartMap(GrowArrow,arrows))
percentage_label = TextMobject("\% of students", color = highlight_color)
percentage_label.move_to(nb_students_label)
percentages = hist_y_values / (nb_students_x * nb_students_y) * 100
anims = []
for (label, percentage) in zip(grade_hist.y_labels_group, percentages):
new_label = DecimalNumber(percentage,
num_decimal_places = 1,
unit = "\%",
color = highlight_color
)
new_label.scale(0.7)
new_label.move_to(label)
anims.append(Transform(label, new_label))
anims.append(ReplacementTransform(nb_students_label, percentage_label))
self.wait()
self.play(*anims)
self.remove(all_quizzes)
# put small copy of class in corner
for (i,pi) in enumerate(all_students):
x = i % 5
y = i / 5
pi.move_to(x * RIGHT + y * UP)
all_students.scale(0.8)
all_students.to_corner(DOWN + LEFT)
self.wait()
self.play(FadeIn(all_students))
prob_label = TextMobject("probability", color = highlight_color)
prob_label.move_to(percentage_label)
self.wait()
self.play(
all_students[8].set_color, MAROON_E,
#all_students[:8].fade, 0.6,
#all_students[9:].fade, 0.6,
ReplacementTransform(percentage_label, prob_label)
)
self.wait()
self.play(
FadeOut(prob_label),
FadeOut(arrows)
)
flash_hist = FlashThroughHistogram(
grade_hist,
direction = "vertical",
mode = "random",
cell_opacity = 0.5,
run_time = 5,
rate_func = linear
)
flash_class = FlashThroughClass(
all_students,
mode = "random",
highlight_color = MAROON_E,
run_time = 5,
rate_func = linear
)
self.wait()
for i in range(3):
self.play(flash_hist, flash_class)
self.remove(flash_hist.prototype_cell)

View File

@@ -1,145 +0,0 @@
from manimlib.imports import *
class ProbabilityRect(VMobject):
CONFIG = {
"unit_width" : 2,
"unit_height" : 2,
"alignment" : LEFT,
"color": YELLOW,
"opacity": 1.0,
"num_decimal_places": 2,
"use_percent" : False
}
def __init__(self, p0, **kwargs):
VMobject.__init__(self, **kwargs)
self.unit_rect = Rectangle(
width = self.unit_width,
height = self.unit_height,
stroke_color = self.color
)
self.p = p0
self.prob_rect = self.create_prob_rect(p0)
self.prob_label = self.create_prob_label(p0)
self.add(self.unit_rect, self.prob_rect, self.prob_label)
def create_prob_rect(self, p):
prob_width, prob_height = self.unit_width, self.unit_height
if self.alignment in [LEFT, RIGHT]:
prob_width *= p
elif self.alignment in [UP, DOWN]:
prob_height *= p
else:
raise Exception("Aligment must be LEFT, RIGHT, UP or DOWN")
prob_rect = Rectangle(
width = prob_width,
height = prob_height,
fill_color = self.color,
fill_opacity = self.opacity,
stroke_color = self.color
)
prob_rect.align_to(self.unit_rect, direction = self.alignment)
return prob_rect
def create_prob_label(self, p):
if self.use_percent:
prob_label = DecimalNumber(
p * 100,
color = BLACK,
num_decimal_places = self.num_decimal_places,
unit = "\%"
)
else:
prob_label = DecimalNumber(
p,
color = BLACK,
num_decimal_places = self.num_decimal_places,
)
prob_label.move_to(self.prob_rect)
return prob_label
class ChangeProbability(Animation):
def __init__(self, prob_mob, p1, **kwargs):
if not isinstance(prob_mob, ProbabilityRect):
raise Exception("ChangeProportion's mobject must be a ProbabilityRect")
self.p1 = p1
self.p0 = prob_mob.p
Animation.__init__(self, prob_mob, **kwargs)
def interpolate_mobject(self, alpha):
p = (1 - alpha) * self.p0 + alpha * self.p1
self.mobject.remove(self.mobject.prob_rect, self.mobject.prob_label)
self.mobject.prob_rect = self.mobject.create_prob_rect(p)
self.mobject.prob_label = self.mobject.create_prob_label(p)
self.mobject.add(self.mobject.prob_rect, self.mobject.prob_label)
def clean_up_from_scene(self, scene=None):
self.mobject.p = self.p1
super(ChangeProbability, self).clean_up_from_scene(scene = scene)
class ShowProbAsProportion(Scene):
def construct(self):
p0 = 0.3
p1 = 1
p2 = 0.18
p3 = 0.64
prob_mob = ProbabilityRect(p0,
unit_width = 4,
unit_height = 2,
use_percent = False,
num_decimal_places = 2
)
self.add(prob_mob)
self.wait()
self.play(
ChangeProbability(prob_mob, p1,
run_time = 3)
)
self.wait(0.5)
self.play(
ChangeProbability(prob_mob, p2,
run_time = 3)
)
self.wait(0.5)
self.play(
ChangeProbability(prob_mob, p3,
run_time = 3)
)

View File

@@ -1,45 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class ShowUncertaintyDarts(Scene):
def throw_darts(self, n, run_time = 1):
points = np.random.normal(
loc = self.dartboard.get_center(),
scale = 0.6 * np.ones(3),
size = (n,3)
)
points[:,2] = 0
dots = VGroup()
for point in points:
dot = Dot(point, radius = 0.04, fill_opacity = 0.7)
dots.add(dot)
self.add(dot)
self.play(
LaggedStartMap(FadeIn, dots, lag_ratio = 0.01, run_time = run_time)
)
def construct(self):
self.dartboard = ImageMobject("dartboard").scale(2)
dartboard_circle = Circle(
radius = self.dartboard.get_width() / 2,
fill_color = BLACK,
fill_opacity = 0.5,
stroke_color = WHITE,
stroke_width = 5
)
self.dartboard.add(dartboard_circle)
self.add(self.dartboard)
self.throw_darts(5,5)
self.throw_darts(20,5)
self.throw_darts(100,5)
self.throw_darts(1000,5)

View File

@@ -1,63 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class ShowUncertaintyDice(Scene):
def throw_a_die(self, run_time = 0.3):
eye = np.random.randint(1,7)
face = self.row_of_dice.submobjects[eye - 1]
self.play(
ApplyMethod(face.submobjects[0].set_fill, {"opacity": 1},
rate_func = there_and_back,
run_time = run_time,
),
)
def construct(self):
self.row_of_dice = RowOfDice(direction = DOWN).scale(0.5)
self.add(self.row_of_dice)
for i in range(5):
self.throw_a_die()
self.wait(1)
for i in range(10):
self.throw_a_die()
self.wait(0.3)
for i in range(100):
self.throw_a_die(0.05)
self.wait(0.0)
class IdealizedDieHistogram(Scene):
def construct(self):
self.probs = 1.0/6 * np.ones(6)
x_scale = 1.3
y_labels = ["${1\over 6}$"] * 6
hist = Histogram(np.ones(6), self.probs,
mode = "widths",
x_labels = "none",
y_labels = y_labels,
y_label_position = "center",
y_scale = 20,
x_scale = x_scale,
)
hist.rotate(-TAU/4)
for label in hist.y_labels_group:
label.rotate(TAU/4)
hist.remove(hist.y_labels_group)
self.play(FadeIn(hist))
self.play(LaggedStartMap(FadeIn, hist.y_labels_group))

View File

@@ -1,104 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class RandyIsSickOrNot(Scene):
def construct(self):
title = TextMobject("1 in 200")
title.to_edge(UP)
randy = SicklyPiCreature()
randy.set_height(3)
randy.move_to(2*LEFT)
randy.change_mode("plain")
randy.set_color(BLUE)
randy.save_state()
self.add(randy)
p_sick = TexMobject("p(","\\text{sick}",") = 0.5\%").scale(1.7)
p_sick.set_color_by_tex("sick", SICKLY_GREEN)
p_sick.next_to(randy, UP, buff = LARGE_BUFF)
self.add(p_sick)
self.wait()
self.play(
ApplyMethod(randy.get_slightly_sick, rate_func = there_and_back)
)
self.play(Blink(randy))
self.wait(2)
self.play(
ApplyMethod(randy.get_sick)
)
self.play(Blink(randy))
self.wait()
self.play(randy.get_better)
self.play(
ApplyMethod(randy.get_slightly_sick, rate_func = there_and_back)
)
self.play(Blink(randy))
self.wait(0.5)
self.play(
ApplyMethod(randy.get_sick)
)
self.play(Blink(randy))
self.play(randy.get_better)
self.wait(3)
class OneIn200HasDisease(Scene):
def construct(self):
title = TextMobject("1 in 200")
title.to_edge(UP)
creature = PiCreature()
all_creatures = VGroup(*[
VGroup(*[
creature.copy()
for y in range(20)
]).arrange(DOWN, SMALL_BUFF)
for x in range(10)
]).arrange(RIGHT, SMALL_BUFF)
all_creatures.set_height(FRAME_HEIGHT * 0.8)
all_creatures.next_to(title, DOWN)
randy = all_creatures[0][0]
all_creatures[0].remove(randy)
randy.change_mode("sick")
randy.set_color(SICKLY_GREEN)
randy.save_state()
randy.set_height(3)
randy.center()
randy.change_mode("plain")
randy.set_color(BLUE)
self.add(randy)
#p_sick = TexMobject("p(","\\text{sick}",") = 0.5\%")
#p_sick.set_color_by_tex("sick", SICKLY_GREEN)
#p_sick.next_to(randy, RIGHT+UP)
#self.add(p_sick)
self.wait()
self.play(
randy.change_mode, "sick",
randy.set_color, SICKLY_GREEN
)
self.play(Blink(randy))
self.play(randy.restore)
self.wait()
self.play(
Write(title),
LaggedStartMap(FadeIn, all_creatures, run_time = 3)
)
self.wait()

View File

@@ -1,29 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class StackingCoins(Scene):
def construct(self):
h = t = 0
heads_stack = HeadsStack(size = h)
heads_stack.next_to(0.5*LEFT + 3*DOWN, UP)
tails_stack = TailsStack(size = t)
tails_stack.next_to(0.5*RIGHT + 3*DOWN, UP)
self.add(heads_stack, tails_stack)
for i in range(120):
flip = np.random.choice(["H", "T"])
if flip == "H":
h += 1
new_heads_stack = HeadsStack(size = h)
new_heads_stack.next_to(0.5*LEFT + 3*DOWN, UP)
self.play(Transform(heads_stack, new_heads_stack,
run_time = 0.2))
elif flip == "T":
t += 1
new_tails_stack = TailsStack(size = t)
new_tails_stack.next_to(0.5*RIGHT + 3*DOWN, UP)
self.play(Transform(tails_stack, new_tails_stack,
run_time = 0.2))

View File

@@ -1,31 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
class RandyThinksAboutCoin(PiCreatureScene):
def construct(self):
randy = self.get_primary_pi_creature()
randy.center()
self.add(randy)
self.wait()
h_or_t = BinaryOption(UprightHeads().scale(3), UprightTails().scale(3),
text_scale = 1.5)
self.think(h_or_t, direction = LEFT)
v = 0.3
self.play(
h_or_t[0].shift,v*UP,
h_or_t[2].shift,v*DOWN,
)
self.play(
h_or_t[0].shift,2*v*DOWN,
h_or_t[2].shift,2*v*UP,
)
self.play(
h_or_t[0].shift,v*UP,
h_or_t[2].shift,v*DOWN,
)
self.wait()

View File

@@ -1,132 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusable_imports import *
from active_projects.eop.combinations import *
from active_projects.eop.independence import *
import itertools as it
class RandyFlipsAndStacks(Scene):
def construct(self):
randy = CoinFlippingPiCreature(color = MAROON_E)
randy.scale(0.5).to_edge(LEFT + DOWN)
heads = tails = 0
tally = TallyStack(heads, tails, anchor = ORIGIN)
nb_flips = 10
flips = np.random.randint(2, size = nb_flips)
for i in range(nb_flips):
self.play(FlipCoin(randy))
self.wait(0.5)
flip = flips[i]
if flip == 0:
heads += 1
elif flip == 1:
tails += 1
else:
raise Exception("That side does not exist on this coin")
new_tally = TallyStack(heads, tails, anchor = ORIGIN)
if tally.nb_heads == 0 and new_tally.nb_heads == 1:
self.play(FadeIn(new_tally.heads_stack))
elif tally.nb_tails == 0 and new_tally.nb_tails == 1:
self.play(FadeIn(new_tally.tails_stack))
else:
self.play(Transform(tally, new_tally))
tally = new_tally
class TwoDiceTableScene(Scene):
def construct(self):
table = TwoDiceTable(cell_size = 1)
table.center()
self.add(table)
class VisualCovariance(Scene):
def construct(self):
size = 4
square = Square(side_length = size)
n_points = 30
cloud = VGroup(*[
Dot((x + 0.8*y) * RIGHT + y * UP).set_fill(WHITE, 1)
for x, y in zip(
np.random.normal(0, 1, n_points),
np.random.normal(0, 1, n_points)
)
])
self.add_foreground_mobject(cloud)
x_axis = Vector(8*RIGHT, color = WHITE).move_to(2.5*DOWN)
y_axis = Vector(5*UP, color = WHITE).move_to(4*LEFT)
self.add(x_axis, y_axis)
random_pairs = [ (p1, p2) for (p1, p2) in
it.combinations(cloud, 2)
]
np.random.shuffle(random_pairs)
for (p1, p2) in random_pairs:
c1, c2 = p1.get_center(), p2.get_center()
x1, y1, x2, y2 = c1[0], c1[1], c2[0], c2[1]
if x1 >= x2:
continue
if y2 > y1:
# make a red rect
color = RED
opacity = 0.1
elif y2 < y1:
# make a blue rect
color = BLUE
opacity = 0.2
rect = Rectangle(width = x2 - x1, height = abs(y2 - y1))
rect.set_fill(color = color, opacity = opacity)
rect.set_stroke(width = 0)
rect.move_to((c1+c2)/2)
self.play(FadeIn(rect), run_time = 0.05)
class BinaryChoices(Scene):
def construct(self):
example1 = BinaryOption(UprightHeads(), UprightTails())
example2 = BinaryOption(Male(), Female())
example3 = BinaryOption(Checkmark(), Xmark())
example2.next_to(example1, DOWN, buff = MED_LARGE_BUFF)
example3.next_to(example2, DOWN, buff = MED_LARGE_BUFF)
all = VGroup(example1, example2, example3)
all = all.scale(2)
self.play(
LaggedStartMap(FadeIn, all)
)

View File

@@ -1,43 +0,0 @@
from manimlib.imports import *
class WhatDoesItReallyMean(TeacherStudentsScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": True,
},
}
def construct(self):
student_q = TextMobject(
"What does", "``probability''\\\\",
"\\emph{actually}", "mean?"
)
student_q.set_color_by_tex("probability", YELLOW)
self.student_says(student_q, target_mode="sassy")
self.wait()
self.play(
self.students[1].change_mode, "confused"
)
self.wait(2)
student_bubble = self.students[1].bubble
self.students[1].bubble = None
student_bubble.add(student_bubble.content)
self.play(
student_bubble.scale, 0.5,
student_bubble.to_corner, UL,
)
self.teacher_says(
"Don't worry -- philosophy\\\\ can come later!",
added_anims=[self.get_student_changes(*3 * ["happy"])],
)
self.wait(2)
self.play(RemovePiCreatureBubble(self.teacher))
self.play(*[
ApplyMethod(pi.look_at, ORIGIN) for pi in self.get_pi_creatures()
])
self.change_all_student_modes("pondering", look_at_arg=UP)
self.wait(3)
self.change_student_modes("confused", look_at_arg=UP)
self.wait(3)

View File

@@ -1,103 +0,0 @@
from manimlib.imports import *
def print_permutation(index_list):
n = max(max(index_list), len(index_list))
for i in range(0,n):
if index_list[i] > n - i:
raise Exception("Impossible indices!")
#print "given index list:", index_list
perm_list = n * ["_"]
alphabet = ["A", "B", "C", "D", "E", "F",
"G", "H", "I", "J", "K", "L",
"M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X",
"Y", "Z"]
free_indices = list(range(n))
free_indices_p1 = list(range(1,n + 1))
#print perm_list
for i in range(n):
findex = index_list[i] - 1
#print "place next letter at", findex + 1, "th free place"
tindex = free_indices[findex]
#print "so at position", tindex + 1
perm_list[tindex] = alphabet[i]
free_indices.remove(tindex)
free_indices_p1.remove(tindex + 1)
#print "remaining free places:", free_indices_p1
#print perm_list
return "".join(perm_list)
class PermutationGrid(Scene):
def text_box(self, str):
box = TextMobject(str).scale(0.3)
box.add(SurroundingRectangle(box, stroke_color = DARK_GREY))
return box
def construct(self):
N = 5
index_list = []
perm5_box = VGroup()
for i in range(1, N + 1):
index_list.append(i)
perm4_box = VGroup()
for j in range(1, N):
index_list.append(j)
perm3_box = VGroup()
for k in range(1, N - 1):
index_list.append(k)
perm2_box = VGroup()
for l in range(1, N - 2):
index_list.append(l)
index_list.append(1)
perm_box = self.text_box(print_permutation(index_list))
if l > 1:
perm_box.next_to(perm2_box[-1], DOWN, buff = 0)
perm2_box.add(perm_box)
index_list.pop()
index_list.pop()
if k > 1:
perm2_box.next_to(perm3_box[-1], RIGHT, buff = 0.08)
perm3_box.add(perm2_box)
index_list.pop()
perm3_box.add(SurroundingRectangle(perm3_box, buff = 0.12, stroke_color = LIGHT_GRAY))
if j > 1:
perm3_box.next_to(perm4_box[-1], DOWN, buff = 0)
perm4_box.add(perm3_box)
index_list.pop()
if i > 1:
perm4_box.next_to(perm5_box[-1], RIGHT, buff = 0.16)
perm5_box.add(perm4_box)
index_list.pop()
perm5_box.move_to(ORIGIN)
self.add(perm5_box)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,347 +0,0 @@
from manimlib.imports import *
from once_useful_constructs.combinatorics import *
nb_levels = 5
dev_x_step = 2
dev_y_step = 5
GRADE_COLOR_1 = RED
GRADE_COLOR_2 = BLUE
def graded_square(n,k):
return Square(
side_length = 1,
fill_color = graded_color(n,k),
fill_opacity = 1,
stroke_width = 1
)
def graded_binomial(n,k):
return Integer(
choose(n,k),
color = graded_color(n,k)
)
def split_square(n,k):
width = 1
height = 1
proportion = float(choose(n,k)) / 2**n
lower_height = proportion * height
upper_height = (1 - proportion) * height
lower_rect = Rectangle(
width = width,
height = lower_height,
fill_color = RED,
fill_opacity = 1.0,
stroke_color = WHITE,
stroke_width = 3
)
upper_rect = Rectangle(
width = width,
height = upper_height,
fill_color = BLUE,
fill_opacity = 1.0,
stroke_color = WHITE,
stroke_width = 3
)
upper_rect.next_to(lower_rect,UP,buff = 0)
square = VGroup(lower_rect, upper_rect).move_to(ORIGIN)
return square
class BuildNewPascalRow(Transform):
def __init__(self,mobject, duplicate_row = None, **kwargs):
if mobject.__class__ != GeneralizedPascalsTriangle and mobject.__class__ != PascalsTriangle:
raise("Transform BuildNewPascalRow only works on members of (Generalized)PascalsTriangle!")
n = mobject.nrows - 1
lowest_row_copy1 = mobject.get_lowest_row()
lowest_row_copy2 = duplicate_row
start_mob = VGroup(lowest_row_copy1, lowest_row_copy2)
new_pt = mobject.copy()
new_pt.nrows += 1
new_pt.generate_points()
# align with original (copy got centered on screen)
c1 = new_pt.coords_to_mobs[0][0].get_center()
c2 = mobject.coords_to_mobs[0][0].get_center()
print(c1, c2)
v = c2 - c1
new_pt.shift(v)
new_row_left_copy = VGroup(*[
new_pt.coords_to_mobs[n+1][k]
for k in range(0,n+1)
])
new_row_right_copy = VGroup(*[
new_pt.coords_to_mobs[n+1][k]
for k in range(1,n+2)
]).copy()
target_mob = VGroup(new_row_left_copy, new_row_right_copy)
Transform.__init__(self, start_mob, target_mob, **kwargs)
class SimplePascal(Scene):
def build_new_pascal_row(self,old_pt):
lowest_row_copy = old_pt.get_lowest_row().copy()
self.add(lowest_row_copy)
n = old_pt.nrows - 1
lowest_row_copy1 = old_pt.get_lowest_row()
lowest_row_copy2 = lowest_row_copy1.copy()
start_mob = VGroup(lowest_row_copy1, lowest_row_copy2)
self.add(start_mob)
new_pt = old_pt.copy()
cell_height = old_pt.height / old_pt.nrows
cell_width = old_pt.width / old_pt.nrows
new_pt.nrows += 1
new_pt.height = new_pt.nrows * cell_height
new_pt.width = new_pt.nrows * cell_width
new_pt.generate_points()
# align with original (copy got centered on screen)
c1 = new_pt.coords_to_mobs[0][0].get_center()
c2 = old_pt.coords_to_mobs[0][0].get_center()
v = c2 - c1
new_pt.shift(v)
new_row_left_copy = VGroup(*[
new_pt.coords_to_mobs[n+1][k]
for k in range(0,n+1)
])
new_row_right_copy = VGroup(*[
new_pt.coords_to_mobs[n+1][k]
for k in range(1,n+2)
]).copy()
target_mob = VGroup(new_row_left_copy, new_row_right_copy)
self.play(Transform(start_mob, target_mob))
return new_pt
def construct(self):
cell_height = 1
cell_width = 1
nrows = 1
pt = GeneralizedPascalsTriangle(
nrows = nrows,
height = nrows * cell_height,
width = nrows * cell_width,
submob_class = graded_square,
portion_to_fill = 0.9
)
pt.shift(3 * UP)
self.add(pt)
lowest_row_copy = pt.get_lowest_row().copy()
self.add(lowest_row_copy)
#self.play(BuildNewPascalRow(pt, duplicate_row = lowest_row_copy))
for i in range(7):
pt = self.build_new_pascal_row(pt)
class PascalNetScene(Scene):
def construct(self):
unit_width = 0.25
top_height = 4.0
level_height = 2.0 * top_height / nb_levels
start_points = np.array([top_height * UP])
dev_start = start_points[0]
j = 0
for n in range(nb_levels):
half_width = 0.5 * (n + 0.5) * unit_width
stop_points_left = start_points.copy()
stop_points_left[:,0] -= 0.5 * unit_width
stop_points_left[:,1] -= level_height
stop_points_right = start_points.copy()
stop_points_right[:,0] += 0.5 * unit_width
stop_points_right[:,1] -= level_height
for (p,q) in zip(start_points,stop_points_left):
alpha = np.abs((p[0]+q[0])/2) / half_width
color = rainbow_color(alpha)
line = Line(p,q, stroke_color = color)
self.add(line)
for (i,(p,q)) in enumerate(zip(start_points,stop_points_right)):
alpha = np.abs((p[0]+q[0])/2) / half_width
color = rainbow_color(alpha)
line = Line(p,q, stroke_color = color)
self.add(line)
if (n + 1) % dev_y_step == 0 and n != 1:
j += dev_x_step
dev_stop = stop_points_left[j]
line = Line(dev_start,dev_stop,stroke_color = WHITE)
self.add(line)
dot = Dot(dev_stop, fill_color = WHITE)
self.add_foreground_mobject(dot)
dev_start = dev_stop
start_points = np.append(stop_points_left,[stop_points_right[-1]], axis = 0)
self.wait()
class RescaledPascalNetScene(Scene):
def construct(self):
half_width = 3.0
top_height = 4.0
level_height = 2.0 * top_height / nb_levels
start_points = np.array([top_height * UP])
left_edge = top_height * UP + half_width * LEFT
right_edge = top_height * UP + half_width * RIGHT
dev_start = start_points[0]
j = 0
for n in range(nb_levels):
if n == 0:
start_points_left_shift = np.array([left_edge])
else:
start_points_left_shift = start_points[:-1]
start_points_left_shift = np.insert(start_points_left_shift,0,left_edge, axis = 0)
stop_points_left = 0.5 * (start_points + start_points_left_shift)
stop_points_left += level_height * DOWN
if n == 0:
start_points_right_shift = np.array([right_edge])
else:
start_points_right_shift = start_points[1:]
start_points_right_shift = np.append(start_points_right_shift,np.array([right_edge]), axis = 0)
stop_points_right = 0.5 * (start_points + start_points_right_shift)
stop_points_right += level_height * DOWN
for (i,(p,q)) in enumerate(zip(start_points,stop_points_left)):
color = LIGHT_GRAY
if n % 2 == 0 and i <= n/2:
m = n/2 + 0.25
jj = i
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 0 and i > n/2:
m = n/2 + 0.25
jj = n - i + 0.5
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 1 and i <= n/2:
m = n/2 + 0.75
jj = i
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 1 and i > n/2:
m = n/2 + 0.75
jj = n - i + 0.5
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
line = Line(p,q, stroke_color = color)
self.add(line)
for (i,(p,q)) in enumerate(zip(start_points,stop_points_right)):
color = LIGHT_GRAY
if n % 2 == 0 and i < n/2:
m = n/2 + 0.25
jj = i + 0.5
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 0 and i >= n/2:
m = n/2 + 0.25
jj = n - i
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 1 and i <= n/2:
m = n/2 + 0.75
jj = i + 0.5
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
elif n % 2 == 1 and i > n/2:
m = n/2 + 0.75
jj = n - i
alpha = 1 - float(jj)/m
color = rainbow_color(alpha)
line = Line(p,q, stroke_color = color)
self.add(line)
if (n + 1) % dev_y_step == 0 and n != 1:
j += dev_x_step
dev_stop = stop_points_left[j]
line = Line(dev_start,dev_stop,stroke_color = WHITE)
self.add(line)
dot = Dot(dev_stop, fill_color = WHITE)
self.add_foreground_mobject(dot)
dev_start = dev_stop
start_points = np.append(stop_points_left,[stop_points_right[-1]], axis = 0)
left_edge += level_height * DOWN
right_edge += level_height * DOWN
self.wait()

View File

@@ -1,11 +0,0 @@
from active_projects.eop.reusables.binary_option import *
from active_projects.eop.reusables.brick_row import *
from active_projects.eop.reusables.coin_flip_tree import *
from active_projects.eop.reusables.coin_flipping_pi_creature import *
from active_projects.eop.reusables.coin_stacks import *
from active_projects.eop.reusables.dice import *
from active_projects.eop.reusables.eop_constants import *
from active_projects.eop.reusables.eop_helpers import *
from active_projects.eop.reusables.histograms import *
from active_projects.eop.reusables.sick_pi_creature import *
from active_projects.eop.reusables.upright_coins import *

View File

@@ -1,15 +0,0 @@
from mobject.types.vectorized_mobject import *
from mobject.svg.tex_mobject import *
class BinaryOption(VMobject):
CONFIG = {
"text_scale" : 0.5
}
def __init__(self, mob1, mob2, **kwargs):
VMobject.__init__(self, **kwargs)
text = TextMobject("or").scale(self.text_scale)
mob1.next_to(text, LEFT)
mob2.next_to(text, RIGHT)
self.add(mob1, text, mob2)

View File

@@ -1,208 +0,0 @@
from manimlib.imports import *
from active_projects.eop.reusables.eop_helpers import *
from active_projects.eop.reusables.eop_constants import *
from active_projects.eop.reusables.upright_coins import *
class BrickRow(VMobject):
CONFIG = {
"left_color" : COLOR_HEADS,
"right_color" : COLOR_TAILS,
"height" : 1.0,
"width" : 8.0,
"outcome_shrinkage_factor_x" : 0.95,
"outcome_shrinkage_factor_y" : 0.94
}
def __init__(self, n, **kwargs):
self.subdiv_level = n
self.coloring_level = n
VMobject.__init__(self, **kwargs)
def generate_points(self):
self.submobjects = []
self.rects = self.get_rects_for_level(self.coloring_level)
self.add(self.rects)
self.subdivs = self.get_subdivs_for_level(self.subdiv_level)
self.add(self.subdivs)
self.border = SurroundingRectangle(self,
buff = 0, color = WHITE)
self.add(self.border)
def get_rects_for_level(self,r):
rects = VGroup()
for k in range(r + 1):
proportion = float(choose(r,k)) / 2**r
new_rect = Rectangle(
width = proportion * self.width,
height = self.height,
fill_color = graded_color(r,k),
fill_opacity = 1,
stroke_width = 0
)
if len(rects.submobjects) > 0:
new_rect.next_to(rects,RIGHT,buff = 0)
else:
new_rect.next_to(self.get_center() + 0.5 * self.width * LEFT, RIGHT, buff = 0)
rects.add(new_rect)
return rects
def get_subdivs_for_level(self,r):
subdivs = VGroup()
x = - 0.5 * self.width
for k in range(0, r):
proportion = float(choose(r,k)) / 2**r
x += proportion * self.width
subdiv = Line(
x * RIGHT + 0.5 * self.height * UP,
x * RIGHT + 0.5 * self.height * DOWN,
)
subdivs.add(subdiv)
subdivs.move_to(self.get_center())
return subdivs
def get_sequence_subdivs_for_level(self,r):
subdivs = VGroup()
x = - 0.5 * self.width
dx = 1.0 / 2**r
for k in range(1, 2 ** r):
proportion = dx
x += proportion * self.width
subdiv = DashedLine(
x * RIGHT + 0.5 * self.height * UP,
x * RIGHT + 0.5 * self.height * DOWN,
)
subdivs.add(subdiv)
subdivs.move_to(self.get_center())
return subdivs
def get_outcome_centers_for_level(self,r):
dpos = float(self.width) / (2 ** r) * RIGHT
pos = 0.5 * self.width * LEFT + 0.5 * dpos
centers = []
for k in range(0, 2 ** r):
centers.append(self.get_center() + pos + k * dpos)
return centers
def get_outcome_rects_for_level(self, r, inset = False, with_labels = False):
centers = self.get_outcome_centers_for_level(r)
if inset == True:
outcome_width = self.outcome_shrinkage_factor_x * float(self.width) / (2 ** r)
outcome_height = self.outcome_shrinkage_factor_y * self.height
else:
outcome_width = float(self.width) / (2 ** r)
outcome_height = self.height
corner_radius = 0.1 # max(0.1, 0.3 * min(outcome_width, outcome_height))
# this scales down the corner radius for very narrow rects
rect = RoundedRectangle(
width = outcome_width,
height = outcome_height,
corner_radius = corner_radius,
fill_color = OUTCOME_COLOR,
fill_opacity = OUTCOME_OPACITY,
stroke_width = 0
)
rects = VGroup()
for center in centers:
rects.add(rect.copy().move_to(center))
rects.move_to(self.get_center())
if with_labels == False:
return rects
# else
sequences = self.get_coin_sequences_for_level(r)
labels = VGroup()
for (seq, rect) in zip(sequences, rects):
coin_seq = CoinSequence(seq, direction = DOWN)
coin_seq.shift(rect.get_center() - coin_seq.get_center())
# not simply move_to bc coin_seq is not centered
rect.add(coin_seq)
rect.label = coin_seq
return rects
def get_coin_sequences_for_level(self,r):
# array of arrays of characters
if r < 0 or int(r) != r:
raise Exception("Level must be a positive integer")
if r == 0:
return []
if r == 1:
return [["H"], ["T"]]
previous_seq_array = self.get_coin_sequences_for_level(r - 1)
subdiv_lengths = [choose(r - 1, k) for k in range(r)]
seq_array = []
index = 0
for length in subdiv_lengths:
for seq in previous_seq_array[index:index + length]:
seq_copy = copy.copy(seq)
seq_copy.append("H")
seq_array.append(seq_copy)
for seq in previous_seq_array[index:index + length]:
seq_copy = copy.copy(seq)
seq_copy.append("T")
seq_array.append(seq_copy)
index += length
return seq_array
def get_outcome_width_for_level(self,r):
return self.width / (2**r)
def get_rect_widths_for_level(self, r):
ret_arr = []
for k in range(0, r):
proportion = float(choose(r,k)) / 2**r
ret_arr.append(proportion * self.width)
return ret_arr
class SplitRectsInBrickWall(AnimationGroup):
def __init__(self, mobject, **kwargs):
#print mobject.height, mobject.get_height()
r = self.subdiv_level = mobject.subdiv_level + 1
subdivs = VGroup()
x = -0.5 * mobject.get_width()
anims = []
for k in range(0, r):
proportion = float(choose(r,k)) / 2**r
x += proportion * mobject.get_width()
subdiv = DashedLine(
mobject.get_top() + x * RIGHT,
mobject.get_bottom() + x * RIGHT,
dash_length = 0.05
)
subdivs.add(subdiv)
anims.append(ShowCreation(subdiv))
mobject.add(subdivs)
AnimationGroup.__init__(self, *anims, **kwargs)

View File

@@ -1,76 +0,0 @@
from mobject.geometry import *
from active_projects.eop.reusables.eop_helpers import *
from active_projects.eop.reusables.eop_constants import *
class CoinFlipTree(VGroup):
CONFIG = {
"total_width": 12,
"level_height": 0.8,
"nb_levels": 4,
"sort_until_level": 3
}
def __init__(self, **kwargs):
VGroup.__init__(self, **kwargs)
self.rows = []
for n in range(self.nb_levels + 1):
if n <= self.sort_until_level:
self.create_row(n, sorted = True)
else:
self.create_row(n, sorted = False)
for row in self.rows:
for leaf in row:
dot = Dot()
dot.move_to(leaf[0])
line = Line(leaf[2], leaf[0])
if leaf[2][0] > leaf[0][0]:
line_color = COLOR_HEADS
else:
line_color = COLOR_TAILS
line.set_stroke(color = line_color)
group = VGroup()
group.add(dot)
group.add_to_back(line)
self.add(group)
def create_row(self, level, sorted = True):
if level == 0:
new_row = [[ORIGIN,0,ORIGIN]] # is its own parent
self.rows.append(new_row)
return
previous_row = self.rows[level - 1]
new_row = []
dx = float(self.total_width) / (2 ** level)
x = - 0.5 * self.total_width + 0.5 * dx
y = - self.level_height * level
for root in previous_row:
root_point = root[0]
root_tally = root[1]
for i in range(2): # 0 = heads = left, 1 = tails = right
leaf = x * RIGHT + y * UP
new_row.append([leaf, root_tally + i, root_point]) # leaf and its parent
x += dx
if sorted:
# sort the new_row by its tallies
sorted_row = []
x = - 0.5 * self.total_width + 0.5 * dx
for i in range(level + 1):
for leaf in new_row:
if leaf[1] == i:
sorted_leaf = leaf
sorted_leaf[0][0] = x
x += dx
sorted_row.append(leaf)
self.rows.append(sorted_row)
else:
self.rows.append(new_row)

View File

@@ -1,112 +0,0 @@
from mobject.types.vectorized_mobject import *
from animation.animation import *
from animation.composition import *
from mobject.geometry import Rectangle, Line
from utils.rate_functions import *
from for_3b1b_videos.pi_creature_scene import *
from active_projects.eop.reusables.eop_helpers import *
from active_projects.eop.reusables.eop_constants import *
from active_projects.eop.reusables.coin_flipping_pi_creature import *
class PiCreatureCoin(VMobject):
CONFIG = {
"diameter": 0.8,
"thickness": 0.2,
"nb_ridges" : 7,
"stroke_color": YELLOW,
"stroke_width": 3,
"fill_color": YELLOW,
"fill_opacity": 0.7,
}
def generate_points(self):
outer_rect = Rectangle(
width = self.diameter,
height = self.thickness,
fill_color = self.fill_color,
fill_opacity = self.fill_opacity,
stroke_color = self.stroke_color,
stroke_width = 0, #self.stroke_width
)
self.add(outer_rect)
PI = TAU/2
ridge_angles = np.arange(PI/self.nb_ridges,PI,PI/self.nb_ridges)
ridge_positions = 0.5 * self.diameter * np.array([
np.cos(theta) for theta in ridge_angles
])
ridge_color = interpolate_color(BLACK,self.stroke_color,0.5)
for x in ridge_positions:
ridge = Line(
x * RIGHT + 0.5 * self.thickness * DOWN,
x * RIGHT + 0.5 * self.thickness * UP,
stroke_color = ridge_color,
stroke_width = self.stroke_width
)
self.add(ridge)
class CoinFlippingPiCreature(PiCreature):
CONFIG = {
"flip_height": 3
}
def __init__(self, mode = "coin_flip_1", **kwargs):
coin = PiCreatureCoin()
PiCreature.__init__(self, mode = mode, **kwargs)
self.coin = coin
self.add(coin)
right_arm = self.get_arm_copies()[1]
coin.rotate(-TAU/24)
coin.next_to(right_arm, RIGHT+UP, buff = 0)
coin.shift(0.1 * self.get_width() * LEFT)
coin.shift(0.2 * DOWN)
def flip_coin_up(self):
self.change("coin_flip_2")
class FlipUpAndDown(Animation):
CONFIG = {
"vector" : UP,
"height" : 3,
"nb_turns" : 1
}
def update(self,t):
self.mobject.shift(self.height * 4 * t * (1 - t) * self.vector)
self.mobject.rotate(t * self.nb_turns * TAU)
class FlipCoin(AnimationGroup):
CONFIG = {
"coin_rate_func" : there_and_back,
"pi_rate_func" : lambda t : there_and_back_with_pause(t, 1./4)
}
def __init__(self, pi_creature, **kwargs):
digest_config(self, kwargs)
pi_creature_motion = ApplyMethod(
pi_creature.flip_coin_up,
rate_func = self.pi_rate_func,
**kwargs
)
coin_motion = Succession(
EmptyAnimation(run_time = 1.0),
FlipUpAndDown(
pi_creature.coin,
vector = UP,
nb_turns = 5,
height = pi_creature.flip_height * pi_creature.get_height(),
rate_func = self.coin_rate_func,
**kwargs
)
)
AnimationGroup.__init__(self,pi_creature_motion, coin_motion)
class CoinFlippingPiCreatureScene(Scene):
def construct(self):
randy = CoinFlippingPiCreature(color = MAROON_E)
self.add(randy)
self.play(FlipCoin(randy, run_time = 3))

View File

@@ -1,111 +0,0 @@
from mobject.geometry import *
from mobject.svg.tex_mobject import *
from active_projects.eop.reusables.upright_coins import *
class CoinStack(VGroup):
CONFIG = {
"coin_thickness": COIN_THICKNESS,
"size": 5,
"face": FlatCoin,
}
def generate_points(self):
for n in range(self.size):
coin = self.face(thickness = self.coin_thickness)
coin.shift(n * self.coin_thickness * UP)
self.add(coin)
if self.size == 0:
point = VectorizedPoint()
self.add(point)
class HeadsStack(CoinStack):
CONFIG = {
"face": FlatHeads
}
class TailsStack(CoinStack):
CONFIG = {
"face": FlatTails
}
class DecimalTally(TextMobject):
def __init__(self, heads, tails, **kwargs):
TextMobject.__init__(self, str(heads), "\\textemdash\,", str(tails), **kwargs)
self[0].set_color(COLOR_HEADS)
self[-1].set_color(COLOR_TAILS)
# this only works for single-digit tallies
class TallyStack(VGroup):
CONFIG = {
"coin_thickness": COIN_THICKNESS,
"show_decimals": True
}
def __init__(self, h, t, anchor = ORIGIN, **kwargs):
self.nb_heads = h
self.nb_tails = t
self.anchor = anchor
VGroup.__init__(self,**kwargs)
def generate_points(self):
stack1 = HeadsStack(size = self.nb_heads, coin_thickness = self.coin_thickness)
stack2 = TailsStack(size = self.nb_tails, coin_thickness = self.coin_thickness)
stack1.next_to(self.anchor, LEFT, buff = 0.5 * SMALL_BUFF)
stack2.next_to(self.anchor, RIGHT, buff = 0.5 * SMALL_BUFF)
stack1.align_to(self.anchor, DOWN)
stack2.align_to(self.anchor, DOWN)
self.heads_stack = stack1
self.tails_stack = stack2
self.add(stack1, stack2)
self.background_rect = background_rect = RoundedRectangle(
width = TALLY_BACKGROUND_WIDTH,
height = TALLY_BACKGROUND_WIDTH,
corner_radius = 0.1,
fill_color = TALLY_BACKGROUND_COLOR,
fill_opacity = 1.0,
stroke_width = 3
).align_to(self.anchor, DOWN).shift(0.1 * DOWN)
self.add_to_back(background_rect)
self.decimal_tally = DecimalTally(self.nb_heads, self.nb_tails)
self.position_decimal_tally(self.decimal_tally)
if self.show_decimals:
self.add(self.decimal_tally)
def position_decimal_tally(self, decimal_tally):
decimal_tally.match_width(self.background_rect)
decimal_tally.scale(0.6)
decimal_tally.next_to(self.background_rect.get_top(), DOWN, buff = 0.15)
return decimal_tally
def move_anchor_to(self, new_anchor):
for submob in self.submobjects:
submob.shift(new_anchor - self.anchor)
self.anchor = new_anchor
self.position_decimal_tally(self.decimal_tally)
return self

View File

@@ -1,76 +0,0 @@
from mobject.svg.svg_mobject import *
from mobject.geometry import *
from mobject.numbers import *
class DieFace(SVGMobject):
def __init__(self, value, **kwargs):
self.value = value
self.file_name = "Dice-" + str(value)
self.ensure_valid_file()
SVGMobject.__init__(self, file_name = self.file_name)
class RowOfDice(VGroup):
CONFIG = {
"values" : list(range(1,7)),
"direction": RIGHT,
}
def generate_points(self):
for value in self.values:
new_die = DieFace(value)
new_die.submobjects[0].set_fill(opacity = 0)
new_die.submobjects[0].set_stroke(width = 7)
new_die.next_to(self, self.direction)
self.add(new_die)
self.move_to(ORIGIN)
class TwoDiceTable(VMobject):
CONFIG = {
"cell_size" : 1,
"label_scale": 0.7
}
def __init__(self, **kwargs):
VMobject.__init__(self, **kwargs)
colors = color_gradient([RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE], 13)
self.cells = VGroup()
self.labels = VGroup()
for i in range(1,7):
for j in range(1,7):
cell = Square(side_length = self.cell_size)
cell.set_fill(color = colors[i+j], opacity = 0.8)
cell.move_to(i*self.cell_size*DOWN + j*self.cell_size*RIGHT)
self.cells.add(cell)
label = Integer(i+j).scale(self.label_scale)
label.move_to(cell)
self.labels.add(label)
self.add(self.cells, self.labels)
row1 = RowOfDice().match_width(self)
row2 = row1.copy().rotate(-TAU/4)
row1.next_to(self, UP)
row2.next_to(self, LEFT)
self.rows = VGroup(row1, row2)
self.add(self.rows)
self.center()

View File

@@ -1,24 +0,0 @@
from constants import *
COIN_RADIUS = 0.18
COIN_THICKNESS = 0.4 * COIN_RADIUS
COIN_FORESHORTENING = 0.5
COIN_NB_RIDGES = 20
COIN_STROKE_WIDTH = 2
COIN_SEQUENCE_SPACING = 0.1
GRADE_COLOR_1 = COLOR_HEADS = RED_E
GRADE_COLOR_2 = COLOR_TAILS = BLUE_C
COLOR_HEADS_COIN = RED
COLOR_TAILS_COIN = BLUE_E
TALLY_BACKGROUND_WIDTH = 1.0
TALLY_BACKGROUND_COLOR = BLACK
SICKLY_GREEN = "#9BBD37"
OUTCOME_COLOR = WHITE
OUTCOME_OPACITY = 0.5

View File

@@ -1,36 +0,0 @@
from utils.color import *
from active_projects.eop.reusables.eop_constants import *
def binary(i):
# returns an array of 0s and 1s
if i == 0:
return []
j = i
binary_array = []
while j > 0:
jj = j/2
if jj > 0:
binary_array.append(j % 2)
else:
binary_array.append(1)
j = jj
return binary_array[::-1]
def nb_of_ones(i):
return binary(i).count(1)
def rainbow_color(alpha):
nb_colors = 100
rainbow = color_gradient([RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE], nb_colors)
rainbow = np.append(rainbow,PURPLE)
index = int(alpha * nb_colors)
return rainbow[index]
def graded_color(n,k):
if n != 0:
alpha = float(k)/n
else:
alpha = 0.5
color = interpolate_color(GRADE_COLOR_1, GRADE_COLOR_2, alpha)
return color

View File

@@ -1,348 +0,0 @@
from manimlib.imports import *
from random import *
def text_range(start,stop,step): # a range as a list of strings
numbers = np.arange(start,stop,step)
labels = []
for x in numbers:
labels.append(str(x))
return labels
class Histogram(VMobject):
CONFIG = {
"start_color" : RED,
"end_color" : BLUE,
"x_scale" : 1.0,
"y_scale" : 1.0,
"x_labels" : "auto", # widths, mids, auto, none, [...]
"y_labels" : "auto", # auto, none, [...]
"y_label_position" : "top", # "center"
"x_min" : 0,
"bar_stroke_width" : 5,
"outline_stroke_width" : 0,
"stroke_color" : WHITE
}
def __init__(self, x_values, y_values, mode = "widths", **kwargs):
# mode = "widths" : x_values means the widths of the bars
# mode = "posts" : x_values means the delimiters btw the bars
digest_config(self, kwargs)
if mode == "widths" and len(x_values) != len(y_values):
raise Exception("Array lengths do not match up!")
elif mode == "posts" and len(x_values) != len(y_values) + 1:
raise Exception("Array lengths do not match up!")
self.y_values = y_values
self.x_values = x_values
self.mode = mode
self.process_values()
VMobject.__init__(self, **kwargs)
def process_values(self):
# preliminaries
self.y_values = np.array(self.y_values)
if self.mode == "widths":
self.widths = self.x_values
self.posts = np.cumsum(self.widths)
self.posts = np.insert(self.posts, 0, 0)
self.posts += self.x_min
self.x_max = self.posts[-1]
elif self.mode == "posts":
self.posts = self.x_values
self.widths = self.x_values[1:] - self.x_values[:-1]
self.x_min = self.posts[0]
self.x_max = self.posts[-1]
else:
raise Exception("Invalid mode or no mode specified!")
self.x_mids = 0.5 * (self.posts[:-1] + self.posts[1:])
self.widths_scaled = self.x_scale * self.widths
self.posts_scaled = self.x_scale * self.posts
self.x_min_scaled = self.x_scale * self.x_min
self.x_max_scaled = self.x_scale * self.x_max
self.y_values_scaled = self.y_scale * self.y_values
def generate_points(self):
self.process_values()
for submob in self.submobjects:
self.remove(submob)
def empty_string_array(n):
arr = []
for i in range(n):
arr.append("")
return arr
def num_arr_to_string_arr(arr): # converts number array to string array
ret_arr = []
for x in arr:
if x == np.floor(x):
new_x = int(np.floor(x))
else:
new_x = x
ret_arr.append(str(new_x))
return ret_arr
previous_bar = ORIGIN
self.bars = VGroup()
self.x_labels_group = VGroup()
self.y_labels_group = VGroup()
outline_points = []
if self.x_labels == "widths":
self.x_labels = num_arr_to_string_arr(self.widths)
elif self.x_labels == "mids":
self.x_labels = num_arr_to_string_arr(self.x_mids)
elif self.x_labels == "auto":
self.x_labels = num_arr_to_string_arr(self.x_mids)
elif self.x_labels == "none":
self.x_labels = empty_string_array(len(self.widths))
if self.y_labels == "auto":
self.y_labels = num_arr_to_string_arr(self.y_values)
elif self.y_labels == "none":
self.y_labels = empty_string_array(len(self.y_values))
for (i,x) in enumerate(self.x_mids):
bar = Rectangle(
width = self.widths_scaled[i],
height = self.y_values_scaled[i],
stroke_width = self.bar_stroke_width,
stroke_color = self.stroke_color,
)
if bar.height == 0:
bar.height = 0.01
bar.generate_points()
t = float(x - self.x_min)/(self.x_max - self.x_min)
bar_color = interpolate_color(
self.start_color,
self.end_color,
t
)
bar.set_fill(color = bar_color, opacity = 1)
bar.next_to(previous_bar,RIGHT,buff = 0, aligned_edge = DOWN)
self.bars.add(bar)
x_label = TextMobject(self.x_labels[i])
x_label.next_to(bar,DOWN)
self.x_labels_group.add(x_label)
y_label = TextMobject(self.y_labels[i])
if self.y_label_position == "top":
y_label.next_to(bar, UP)
elif self.y_label_position == "center":
y_label.move_to(bar)
else:
raise Exception("y_label_position must be top or center")
self.y_labels_group.add(y_label)
if i == 0:
# start with the lower left
outline_points.append(bar.get_anchors()[-2])
# upper two points of each bar
outline_points.append(bar.get_anchors()[0])
outline_points.append(bar.get_anchors()[1])
previous_bar = bar
# close the outline
# lower right
outline_points.append(bar.get_anchors()[2])
# lower left
outline_points.append(outline_points[0])
self.outline = Polygon(*outline_points,
stroke_width = self.outline_stroke_width,
stroke_color = self.stroke_color)
self.add(self.bars, self.x_labels_group, self.y_labels_group, self.outline)
self.move_to(ORIGIN)
def get_lower_left_point(self):
return self.bars[0].get_anchors()[-2]
class BuildUpHistogram(Animation):
def __init__(self, hist, **kwargs):
self.histogram = hist
class FlashThroughHistogram(Animation):
CONFIG = {
"cell_color" : WHITE,
"cell_opacity" : 0.8,
"hist_opacity" : 0.2
}
def __init__(self, mobject,
direction = "horizontal",
mode = "random",
**kwargs):
digest_config(self, kwargs)
self.cell_height = mobject.y_scale
self.prototype_cell = Rectangle(
width = 1,
height = self.cell_height,
fill_color = self.cell_color,
fill_opacity = self.cell_opacity,
stroke_width = 0,
)
x_values = mobject.x_values
y_values = mobject.y_values
self.mode = mode
self.direction = direction
self.generate_cell_indices(x_values,y_values)
Animation.__init__(self,mobject,**kwargs)
def generate_cell_indices(self,x_values,y_values):
self.cell_indices = []
for (i,x) in enumerate(x_values):
nb_cells = int(np.floor(y_values[i]))
for j in range(nb_cells):
self.cell_indices.append((i, j))
self.reordered_cell_indices = self.cell_indices
if self.mode == "random":
shuffle(self.reordered_cell_indices)
def cell_for_index(self,i,j):
if self.direction == "vertical":
width = self.mobject.x_scale
height = self.mobject.y_scale
x = (i + 0.5) * self.mobject.x_scale
y = (j + 0.5) * self.mobject.y_scale
center = self.mobject.get_lower_left_point() + x * RIGHT + y * UP
elif self.direction == "horizontal":
width = self.mobject.x_scale / self.mobject.y_values[i]
height = self.mobject.y_scale * self.mobject.y_values[i]
x = i * self.mobject.x_scale + (j + 0.5) * width
y = height / 2
center = self.mobject.get_lower_left_point() + x * RIGHT + y * UP
cell = Rectangle(width = width, height = height)
cell.move_to(center)
return cell
def interpolate_mobject(self,t):
if t == 0:
self.mobject.add(self.prototype_cell)
flash_nb = int(t * (len(self.cell_indices))) - 1
(i,j) = self.reordered_cell_indices[flash_nb]
cell = self.cell_for_index(i,j)
self.prototype_cell.width = cell.get_width()
self.prototype_cell.height = cell.get_height()
self.prototype_cell.generate_points()
self.prototype_cell.move_to(cell.get_center())
if t == 1:
self.mobject.remove(self.prototype_cell)
def clean_up_from_scene(self, scene = None):
Animation.clean_up_from_scene(self, scene)
self.update(1)
if scene is not None:
if self.is_remover():
scene.remove(self.prototype_cell)
else:
scene.add(self.prototype_cell)
return self
class OutlineableBars(VGroup):
# A group of bars (rectangles), together with
# a method that draws an outline around them,
# assuming the bars are arranged in a histogram
# (aligned at the bottom without gaps).
# We use this to morph a row of bricks into a histogram.
CONFIG = {
"outline_stroke_width" : 3,
"stroke_color" : WHITE
}
def create_outline(self, animated = False, **kwargs):
outline_points = []
for (i, bar) in enumerate(self.submobjects):
if i == 0:
# start with the lower left
outline_points.append(bar.get_corner(DOWN + LEFT))
# upper two points of each bar
outline_points.append(bar.get_corner(UP + LEFT))
outline_points.append(bar.get_corner(UP + RIGHT))
previous_bar = bar
# close the outline
# lower right
outline_points.append(previous_bar.get_corner(DOWN + RIGHT))
# lower left
outline_points.append(outline_points[0])
self.outline = Polygon(*outline_points,
stroke_width = self.outline_stroke_width,
stroke_color = self.stroke_color)
if animated:
self.play(FadeIn(self.outline, **kwargs))
return self.outline

View File

@@ -1,22 +0,0 @@
from for_3b1b_videos.pi_creature import *
from active_projects.eop.reusables.eop_constants import *
class SicklyPiCreature(PiCreature):
CONFIG = {
"sick_color": SICKLY_GREEN
}
def get_slightly_sick(self):
self.save_state()
self.set_color(self.sick_color)
def get_sick(self):
self.get_slightly_sick()
self.change_mode("sick")
def get_better(self):
self.restore()

View File

@@ -1,132 +0,0 @@
from mobject.geometry import *
from mobject.svg.tex_mobject import *
from utils.color import *
from active_projects.eop.reusables.eop_helpers import *
from active_projects.eop.reusables.eop_constants import *
class UprightCoin(Circle):
# For use in coin sequences
CONFIG = {
"radius": COIN_RADIUS,
"stroke_width": COIN_STROKE_WIDTH,
"stroke_color": WHITE,
"fill_opacity": 1,
"symbol": "\euro"
}
def __init__(self, **kwargs):
Circle.__init__(self,**kwargs)
self.symbol_mob = TextMobject(self.symbol, stroke_color = self.stroke_color)
self.symbol_mob.set_height(0.5*self.get_height()).move_to(self)
self.add(self.symbol_mob)
class UprightHeads(UprightCoin):
CONFIG = {
"fill_color": COLOR_HEADS_COIN,
"symbol": "H",
}
class UprightTails(UprightCoin):
CONFIG = {
"fill_color": COLOR_TAILS_COIN,
"symbol": "T",
}
class CoinSequence(VGroup):
CONFIG = {
"sequence": [],
"radius" : COIN_RADIUS,
"spacing": COIN_SEQUENCE_SPACING,
"direction": RIGHT
}
def __init__(self, sequence, **kwargs):
VGroup.__init__(self, **kwargs)
self.sequence = sequence
offset = 0
for symbol in self.sequence:
if symbol == "H":
new_coin = UprightHeads(radius = self.radius)
elif symbol == "T":
new_coin = UprightTails(radius = self.radius)
else:
new_coin = UprightCoin(symbol = symbol, radius = self.radius)
new_coin.shift(offset * self.direction)
self.add(new_coin)
offset += self.spacing
class FlatCoin(UprightCoin):
# For use in coin stacks
CONFIG = {
"thickness": COIN_THICKNESS,
"foreshortening": COIN_FORESHORTENING,
"nb_ridges": COIN_NB_RIDGES
}
def __init__(self, **kwargs):
UprightCoin.__init__(self, **kwargs)
self.symbol_mob.rotate(TAU/8)
self.stretch_in_place(self.foreshortening, 1)
# draw the edge
control_points1 = self.points[12:25].tolist()
control_points2 = self.copy().shift(self.thickness * DOWN).points[12:25].tolist()
edge_anchors_and_handles = control_points1
edge_anchors_and_handles.append(edge_anchors_and_handles[-1] + self.thickness * DOWN)
edge_anchors_and_handles.append(edge_anchors_and_handles[-1] + self.thickness * UP)
edge_anchors_and_handles += control_points2[::-1] # list concatenation
edge_anchors_and_handles.append(edge_anchors_and_handles[-1] + self.thickness * UP)
edge_anchors_and_handles.append(edge_anchors_and_handles[-1] + self.thickness * DOWN)
edge_anchors_and_handles.append(control_points1[0])
#edge_anchors_and_handles = edge_anchors_and_handles[::-1]
edge = VMobject()
edge.set_points(edge_anchors_and_handles)
edge.set_fill(
color = self.fill_color,
opacity = self.fill_opacity
)
edge.set_stroke(width = self.stroke_width)
self.add(edge)
# draw the ridges
PI = TAU/2
dtheta = PI/self.nb_ridges
ridge_angles = np.arange(dtheta,PI,dtheta)
# add a twist onto each coin
ridge_angles += np.random.rand(1) * dtheta
# crop the angles that overshoot on either side
ridge_angles = ridge_angles[(ridge_angles > 0) * (ridge_angles < PI)]
ridge_positions = 0.5 * 2 * self.radius * np.array([
np.cos(theta) for theta in ridge_angles
])
ridge_color = interpolate_color(self.stroke_color, self.fill_color, 0.7)
for x in ridge_positions:
y = -(1 - (x/self.radius)**2)**0.5 * self.foreshortening * self.radius
ridge = Line(
x * RIGHT + y * UP,
x * RIGHT + y * UP + self.thickness * DOWN,
stroke_color = ridge_color,
stroke_width = self.stroke_width
)
self.add(ridge)
# redraw the unfilled edge to cover the ridge ends
empty_edge = edge.copy()
empty_edge.set_fill(opacity = 0)
self.add(empty_edge)
class FlatHeads(FlatCoin):
CONFIG = {
"fill_color": COLOR_HEADS_COIN,
"symbol": "H",
}
class FlatTails(FlatCoin):
CONFIG = {
"fill_color": COLOR_TAILS_COIN,
"symbol": "T",
}

View File

@@ -1,30 +0,0 @@
from manimlib.imports import *
class WhatDoesItReallyMean(TeacherStudentsScene):
CONFIG = {
"default_pi_creature_kwargs": {
"color": MAROON_E,
"flip_at_start": True,
},
}
def construct(self):
student_q = TextMobject("What does", "``probability''", "\emph{actually}", "mean?")
student_q.set_color_by_tex("probability", YELLOW)
self.student_says(student_q, target_mode = "sassy")
self.wait()
question_bubble = VGroup(student_q, students[1].bubble)
scaled_qb = question_bubble.copy()
scaled_qb.scale(0.4).to_corner(UL)
self.play(Transform(question_bubble, scaled_qb))
self.wait()
self.teacher_says("Don't worry -- philosophy can come later!")
self.wait()

View File

@@ -1,182 +0,0 @@
from manimlib.imports import *
class ComplexAnalysisOverlay(Scene):
def construct(self):
words = TextMobject("Complex analysis")
words.scale(1.25)
words.to_edge(UP)
words.add_background_rectangle()
self.add(words)
self.wait()
class AnalyzeZSquared(ComplexTransformationScene, ZoomedScene):
CONFIG = {
"plane_config": {
"line_frequency": 0.1,
},
"num_anchors_to_add_per_line": 20,
"complex_homotopy": lambda z, t: z**(1.0 + t),
"zoom_factor": 0.05,
}
def setup(self):
ComplexTransformationScene.setup(self)
ZoomedScene.setup(self)
def construct(self):
self.edit_background_plane()
self.add_title()
# self.add_transforming_planes()
# self.preview_some_numbers()
self.zoom_in_to_one_plus_half_i()
self.write_derivative()
def add_title(self):
title = TexMobject("z \\rightarrow z^2")
title.add_background_rectangle()
title.scale(1.5)
title.to_corner(UL, buff=MED_SMALL_BUFF)
self.add_foreground_mobject(title)
def edit_background_plane(self):
self.backgrounds.set_stroke(GREY, 2)
self.background.secondary_lines.set_stroke(DARK_GREY, 1)
self.add_foreground_mobject(self.background.coordinate_labels)
def add_transforming_planes(self):
self.plane = self.get_plane()
self.add_transformable_mobjects(self.plane)
def preview_some_numbers(self):
dots = VGroup(*[
Dot().move_to(self.background.number_to_point(z))
for z in [
1, 2, complex(0, 1),
-1, complex(2, 0.5), complex(-1, -1), complex(3, 0.5),
]
])
dots.set_color_by_gradient(RED, YELLOW)
d_angle = 30 * DEGREES
dot_groups = VGroup()
for dot in dots:
point = dot.get_center()
z = self.background.point_to_number(point)
z_out = self.complex_homotopy(z, 1)
out_point = self.background.number_to_point(z_out)
path_arc = angle_of_vector(point)
if abs(z - 1) < 0.01:
# One is special
arrow = Arc(
start_angle=(-90 * DEGREES + d_angle),
angle=(360 * DEGREES - 2 * d_angle),
radius=0.25
)
arrow.add_tip(tip_length=0.15)
arrow.pointwise_become_partial(arrow, 0, 0.9)
arrow.next_to(dot, UP, buff=0)
else:
arrow = Arrow(
point, out_point,
path_arc=path_arc,
buff=SMALL_BUFF,
)
arrow.match_color(dot)
out_dot = dot.copy()
# out_dot.set_fill(opacity=0.5)
out_dot.set_stroke(BLUE, 1)
out_dot.move_to(out_point)
dot.path_arc = path_arc
dot.out_dot = out_dot
dot_group = VGroup(dot, arrow, out_dot)
dot_groups.add(dot_group)
dot_copy = dot.copy()
dot.save_state()
dot.scale(3)
dot.fade(1)
dot_group.anim = Succession(
ApplyMethod(dot.restore),
AnimationGroup(
ShowCreation(arrow),
ReplacementTransform(
dot_copy, out_dot,
path_arc=path_arc
)
)
)
for dot_group in dot_groups[:3]:
self.play(dot_group.anim)
self.wait()
self.play(*[dg.anim for dg in dot_groups[3:]])
self.apply_complex_homotopy(
self.complex_homotopy,
added_anims=[Animation(dot_groups)]
)
self.wait()
self.play(FadeOut(dot_groups))
self.wait()
self.play(FadeOut(self.plane))
self.transformable_mobjects.remove(self.plane)
def zoom_in_to_one_plus_half_i(self):
z = complex(1, 0.5)
point = self.background.number_to_point(z)
point_mob = VectorizedPoint(point)
frame = self.zoomed_camera.frame
frame.move_to(point)
tiny_plane = NumberPlane(
x_radius=2, y_radius=2,
color=GREEN,
secondary_color=GREEN_E
)
tiny_plane.replace(frame)
plane = self.get_plane()
words = TextMobject("What does this look like")
words.add_background_rectangle()
words.next_to(self.zoomed_display, LEFT, aligned_edge=UP)
arrow = Arrow(words.get_bottom(), self.zoomed_display.get_left())
VGroup(words, arrow).set_color(YELLOW)
self.play(FadeIn(plane))
self.activate_zooming(animate=True)
self.play(ShowCreation(tiny_plane))
self.wait()
self.add_transformable_mobjects(plane, tiny_plane, point_mob)
self.add_foreground_mobjects(words, arrow)
self.apply_complex_homotopy(
self.complex_homotopy,
added_anims=[
Write(words),
GrowArrow(arrow),
MaintainPositionRelativeTo(frame, point_mob)
]
)
self.wait(2)
def write_derivative(self):
pass
# Helpers
def get_plane(self):
top_plane = NumberPlane(
y_radius=FRAME_HEIGHT / 2,
x_line_frequency=0.1,
y_line_frequency=0.1,
)
self.prepare_for_transformation(top_plane)
bottom_plane = top_plane.copy()
tiny_tiny_buff = 0.001
top_plane.next_to(ORIGIN, UP, buff=tiny_tiny_buff)
bottom_plane.next_to(ORIGIN, DOWN, buff=tiny_tiny_buff)
return VGroup(top_plane, bottom_plane)

View File

@@ -1,415 +0,0 @@
from manimlib.imports import *
# Helpers
def get_shadow(mobject, opacity=0.5):
result = mobject.deepcopy()
result.apply_function(lambda p: [p[0], p[1], 0])
color = interpolate_color(
mobject.get_fill_color(), BLACK,
mobject.get_fill_opacity()
)
# color = BLACK
result.set_fill(color, opacity=opacity)
result.set_stroke(BLACK, 0.5, opacity=opacity)
result.set_shade_in_3d(False)
return result
def get_boundary_points(shadow, n_points=20):
points = shadow.get_points_defining_boundary()
return np.array([
points[np.argmax(np.dot(points, vect.T))]
for vect in compass_directions(n_points)
])
def get_area(planar_mobject):
boundary = get_boundary_points(planar_mobject, 100)
xs = boundary[:, 0]
ys = boundary[:, 1]
dxs = np.append(xs[-1], xs[:-1]) - xs
dys = np.append(ys[-1], ys[:-1]) - ys
return abs(sum([
0.5 * (x * dy - y * dx)
for x, dx, y, dy in zip(xs, dxs, ys, dys)
]))
def get_xy_plane_projection_point(p1, p2):
"""
Draw a line from source to p1 to p2. Where does it
intersect the xy plane?
"""
vect = p2 - p1
return p1 - (p1[2] / vect[2]) * vect
# Scenes
class ShowShadows(ThreeDScene):
CONFIG = {
"object_center": [0, 0, 3],
"area_label_center": [0, -1.5, 0],
"surface_area": 6.0,
"num_reorientations": 10,
"camera_config": {
"light_source_start_point": 10 * OUT,
"frame_center": [0, 0, 0.5],
},
"initial_orientation_config": {
"phi": 60 * DEGREES,
"theta": -120 * DEGREES,
}
}
def setup(self):
self.add_plane()
self.setup_orientation_trackers()
self.setup_object_and_shadow()
self.add_shadow_area_label()
self.add_surface_area_label()
def add_plane(self):
plane = self.plane = Rectangle(
width=FRAME_WIDTH,
height=24.2,
stroke_width=0,
fill_color=WHITE,
fill_opacity=0.35,
)
plane.set_sheen(0.2, DR)
grid = NumberPlane(
color=LIGHT_GREY,
secondary_color=DARK_GREY,
y_radius=int(plane.get_height() / 2),
stroke_width=1,
secondary_line_ratio=0,
)
plane.add(grid)
plane.add(VectorizedPoint(10 * IN))
plane.set_shade_in_3d(True, z_index_as_group=True)
self.add(plane)
def setup_orientation_trackers(self):
# Euler angles
self.alpha_tracker = ValueTracker(0)
self.beta_tracker = ValueTracker(0)
self.gamma_tracker = ValueTracker(0)
def setup_object_and_shadow(self):
self.obj3d = always_redraw(self.get_reoriented_object)
self.shadow = always_redraw(lambda: get_shadow(self.obj3d))
def add_shadow_area_label(self):
text = TextMobject("Shadow area: ")
decimal = DecimalNumber(0)
label = VGroup(text, decimal)
label.arrange(RIGHT)
label.scale(1.5)
label.move_to(self.area_label_center - decimal.get_center())
self.shadow_area_label = label
self.shadow_area_decimal = decimal
# def update_decimal(decimal):
# # decimal.set_value(get_area(self.shadow))
# self.add_fixed_in_frame_mobjects(decimal)
# decimal.add_updater(update_decimal)
decimal.add_updater(
lambda d: d.set_value(get_area(self.shadow))
)
decimal.add_updater(
lambda d: self.add_fixed_in_frame_mobjects(d)
)
# self.add_fixed_orientation_mobjects(label)
self.add_fixed_in_frame_mobjects(label)
self.add(label)
self.add(decimal)
def add_surface_area_label(self):
text = TextMobject("Surface area: ")
decimal = DecimalNumber(self.surface_area)
label = VGroup(text, decimal)
label.arrange(RIGHT)
label.scale(1.25)
label.set_fill(YELLOW)
label.set_background_stroke(width=3)
label.next_to(self.obj3d, RIGHT, LARGE_BUFF)
label.shift(MED_LARGE_BUFF * IN)
self.surface_area_label = label
self.add_fixed_orientation_mobjects(label)
def construct(self):
# Show creation
obj3d = self.obj3d.copy()
obj3d.clear_updaters()
temp_shadow = always_redraw(lambda: get_shadow(obj3d))
self.add(temp_shadow)
self.move_camera(
**self.initial_orientation_config,
added_anims=[
LaggedStartMap(DrawBorderThenFill, obj3d)
],
run_time=2
)
self.begin_ambient_camera_rotation(0.01)
self.remove(obj3d, temp_shadow)
average_label = self.get_average_label()
# Reorient
self.add(self.obj3d, self.shadow)
for n in range(self.num_reorientations):
self.randomly_reorient()
if n == 3:
self.add_fixed_in_frame_mobjects(average_label)
self.play(Write(average_label, run_time=2))
else:
self.wait()
def randomly_reorient(self, run_time=3):
a, b, c = TAU * np.random.random(3)
self.play(
self.alpha_tracker.set_value, a,
self.beta_tracker.set_value, b,
self.gamma_tracker.set_value, c,
run_time=run_time
)
#
def get_object(self):
cube = Cube()
cube.set_height(1)
# cube.set_width(2, stretch=True)
cube.set_stroke(WHITE, 0.5)
return cube
def get_reoriented_object(self):
obj3d = self.get_object()
angles = [
self.alpha_tracker.get_value(),
self.beta_tracker.get_value(),
self.gamma_tracker.get_value(),
]
vects = [OUT, RIGHT, OUT]
center = self.object_center
obj3d.move_to(center)
for angle, vect in zip(angles, vects):
obj3d.rotate(angle, vect, about_point=center)
return obj3d
def get_average_label(self):
rect = SurroundingRectangle(
self.shadow_area_decimal,
buff=SMALL_BUFF,
color=RED,
)
words = TextMobject(
"Average", "=",
"$\\frac{\\text{Surface area}}{4}$"
)
words.scale(1.5)
words[0].match_color(rect)
words[2].set_color(self.surface_area_label[0].get_fill_color())
words.set_background_stroke(width=3)
words.next_to(
rect, DOWN,
index_of_submobject_to_align=0,
)
# words.shift(MED_LARGE_BUFF * LEFT)
return VGroup(rect, words)
class ShowInfinitelyFarLightSource(ShowShadows):
CONFIG = {
"num_reorientations": 1,
"camera_center": [0, 0, 1],
}
def construct(self):
self.force_skipping()
ShowShadows.construct(self)
self.revert_to_original_skipping_status()
self.add_light_source_based_shadow_updater()
self.add_light()
self.move_light_around()
self.show_vertical_lines()
def add_light(self):
light = self.light = self.get_light()
light_source = self.camera.light_source
light.move_to(light_source)
light_source.add_updater(lambda m: m.move_to(light))
self.add(light_source)
self.add_fixed_orientation_mobjects(light)
def move_light_around(self):
light = self.light
self.add_foreground_mobjects(self.shadow_area_label)
self.play(
light.move_to, 5 * OUT + DOWN,
run_time=3
)
self.play(Rotating(
light, angle=TAU, about_point=5 * OUT,
rate_func=smooth, run_time=3
))
self.play(
light.move_to, 30 * OUT,
run_time=3,
)
self.remove(light)
def show_vertical_lines(self):
lines = self.get_vertical_lines()
obj3d = self.obj3d
shadow = self.shadow
target_obj3d = obj3d.copy()
target_obj3d.become(shadow)
target_obj3d.match_style(obj3d)
target_obj3d.set_shade_in_3d(False)
source_obj3d = obj3d.copy()
source_obj3d.set_shade_in_3d(False)
source_obj3d.fade(1)
self.play(LaggedStartMap(ShowCreation, lines))
self.wait()
self.add(source_obj3d, lines)
self.play(
ReplacementTransform(source_obj3d, target_obj3d),
run_time=2
)
self.add(target_obj3d, lines)
self.play(FadeOut(target_obj3d),)
self.wait()
lines.add_updater(lambda m: m.become(self.get_vertical_lines()))
for x in range(5):
self.randomly_reorient()
def add_light_source_based_shadow_updater(self):
shadow = self.shadow
light_source = self.camera.light_source
obj3d = self.obj3d
center = obj3d.get_center()
def update(shadow):
lsp = light_source.get_center()
proj_center = get_xy_plane_projection_point(lsp, center)
c_to_lsp = lsp - center
unit_c_to_lsp = normalize(c_to_lsp)
rotation = rotation_matrix(
angle=np.arccos(np.dot(unit_c_to_lsp, OUT)),
axis=normalize(np.cross(unit_c_to_lsp, OUT))
)
new_shadow = get_shadow(
self.obj3d.copy().apply_matrix(rotation)
)
shadow.become(new_shadow)
shadow.scale(get_norm(lsp) / get_norm(c_to_lsp))
shadow.move_to(proj_center)
return shadow
shadow.add_updater(update)
def get_light(self):
n_rings = 40
radii = np.linspace(0, 2, n_rings)
rings = VGroup(*[
Annulus(inner_radius=r1, outer_radius=r2)
for r1, r2 in zip(radii, radii[1:])
])
opacities = np.linspace(1, 0, n_rings)**1.5
for opacity, ring in zip(opacities, rings):
ring.set_fill(YELLOW, opacity)
ring.set_stroke(YELLOW, width=0.1, opacity=opacity)
return rings
def get_vertical_lines(self):
shadow = self.shadow
points = get_boundary_points(shadow, 10)
# half_points = [(p1 + p2) / 2 for p1, p2 in adjacent_pairs(points)]
# points = np.append(points, half_points, axis=0)
light_source = self.light.get_center()
lines = VGroup(*[
DashedLine(light_source, point)
for point in points
])
lines.set_shade_in_3d(True)
for line in lines:
line.remove(*line[:int(0.8 * len(line))])
line[-10:].set_shade_in_3d(False)
line.set_stroke(YELLOW, 1)
return lines
class CylinderShadows(ShowShadows):
CONFIG = {
"surface_area": 2 * PI + 2 * PI * 2,
"area_label_center": [0, -2, 0],
}
def get_object(self):
height = 2
cylinder = ParametricSurface(
lambda u, v: np.array([
np.cos(TAU * v),
np.sin(TAU * v),
height * (1 - u)
]),
resolution=(6, 32)
)
# circle = Circle(radius=1)
circle = ParametricSurface(
lambda u, v: np.array([
(v + 0.01) * np.cos(TAU * u),
(v + 0.01) * np.sin(TAU * u),
0,
]),
resolution=(16, 8)
)
# circle.set_fill(GREEN, opacity=0.5)
for surface in cylinder, circle:
surface.set_fill_by_checkerboard(GREEN, GREEN_E, opacity=1.0)
# surface.set_fill(GREEN, opacity=0.5)
cylinder.add(circle)
cylinder.add(circle.copy().flip().move_to(height * OUT))
cylinder.set_shade_in_3d(True)
cylinder.set_stroke(width=0)
cylinder.scale(1.003)
return cylinder
class PrismShadows(ShowShadows):
CONFIG = {
"surface_area": 3 * np.sqrt(3) / 2 + 3 * (np.sqrt(3) * 2),
"object_center": [0, 0, 3],
"area_label_center": [0, -2.25, 0],
}
def get_object(self):
height = 2
prism = VGroup()
triangle = RegularPolygon(3)
verts = triangle.get_anchors()[:3]
rects = [
Polygon(v1, v2, v2 + height * OUT, v1 + height * OUT)
for v1, v2 in adjacent_pairs(verts)
]
prism.add(triangle, *rects)
prism.add(triangle.copy().shift(height * OUT))
triangle.reverse_points()
prism.set_shade_in_3d(True)
prism.set_fill(PINK, 0.8)
prism.set_stroke(WHITE, 1)
return prism
class TheseFourPiAreSquare(PiCreatureScene):
def construct(self):
pass
def create_pi_creatures(self):
pass

View File

@@ -1,16 +0,0 @@
version: '3.1'
services:
manim:
# comment this line if you build the image to prevent overwriting the tag
image: eulertour/manim:latest
# uncomment this line to build rather than pull the image
# build: .
entrypoint:
- manim
- --media_dir=/tmp/output
volumes:
- ${INPUT_PATH:?INPUT_PATH environment variable isn't set}:/tmp/input
- ${OUTPUT_PATH:?OUTPUT_PATH environment variable isn't set}:/tmp/output
working_dir: /tmp/input
network_mode: "none"

View File

@@ -1,9 +1,10 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
@@ -16,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

37
docs/example.py Normal file
View File

@@ -0,0 +1,37 @@
from manimlib import *
class SquareToCircle(Scene):
def construct(self):
circle = Circle()
circle.set_fill(BLUE, opacity=0.5)
circle.set_stroke(BLUE_E, width=4)
square = Square()
self.play(ShowCreation(square))
self.wait()
self.play(ReplacementTransform(square, circle))
self.wait()
# Try typing the following lines
# self.play(circle.animate.stretch(4, dim=0))
# self.play(Rotate(circle, TAU / 4))
# self.play(circle.animate.shift(2 * RIGHT), circle.animate.scale(0.25))
# circle.insert_n_curves(10)
# self.play(circle.animate.apply_complex_function(lambda z: z**2))
class SquareToCircleEmbed(Scene):
def construct(self):
circle = Circle()
circle.set_fill(BLUE, opacity=0.5)
circle.set_stroke(BLUE_E, width=4)
self.add(circle)
self.wait()
self.play(circle.animate.stretch(4, dim=0))
self.wait(1.5)
self.play(Rotate(circle, TAU / 4))
self.wait(1.5)
self.play(circle.animate.shift(2 * RIGHT), circle.animate.scale(0.25))
self.wait(1.5)
circle.insert_n_curves(10)
self.play(circle.animate.apply_complex_function(lambda z: z**2))
self.wait(2)

View File

@@ -1,35 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
:end
popd
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

4
docs/requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
Sphinx==3.0.3
sphinx-copybutton
furo==2020.10.5b9
Jinja2

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,11 +0,0 @@
About
=====
Animating technical concepts is traditionally pretty tedious, since it can be
difficult to make the animations precise enough to convey them accurately.
``Manim`` uses Python to generate animations programmatically, which makes it
possible to specify exactly how each one should run.
This project is still very much a work in progress, but I hope that the
information here will make it easier for newcomers to get started using
``Manim``.

View File

@@ -1,210 +0,0 @@
Animation
=========
The simplest of which is ``Scene.add``. The object appears on the first frame
without any animation::
class NoAnimation(Scene):
def construct(self):
square = Square()
self.add(square))
Animation are used in conjunction with ``scene.Play``
Fade
----
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeIn.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeIn(Scene):
def construct(self):
square = Square()
anno = TextMobject("Fade In")
anno.shift(2 * DOWN)
self.add(anno)
self.play(FadeIn(square))
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeOut.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeOut(Scene):
def construct(self):
square = Square()
anno = TextMobject("Fade Out")
anno.shift(2 * DOWN)
self.add(anno)
self.add(square)
self.play(FadeOut(square))
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeInFrom.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeInFrom(Scene):
def construct(self):
square = Square()
for label, edge in zip(
["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]
):
anno = TextMobject(f"Fade In from {label}")
anno.shift(2 * DOWN)
self.add(anno)
self.play(FadeInFrom(square, edge))
self.remove(anno, square)
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeOutAndShift.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeOutAndShift(Scene):
def construct(self):
square = Square()
for label, edge in zip(
["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]
):
anno = TextMobject(f"Fade Out and shift {label}")
anno.shift(2 * DOWN)
self.add(anno)
self.play(FadeOutAndShift(square, edge))
self.remove(anno, square)
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeInFromLarge.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeInFromLarge(Scene):
def construct(self):
square = Square()
for factor in [0.1, 0.5, 0.8, 1, 2, 5]:
anno = TextMobject(f"Fade In from large scale\_factor={factor}")
anno.shift(2 * DOWN)
self.add(anno)
self.play(FadeInFromLarge(square, scale_factor=factor))
self.remove(anno, square)
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeInFromPoint.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeInFromPoint(Scene):
def construct(self):
square = Square()
for i in range(-6, 7, 2):
anno = TextMobject(f"Fade In from point {i}")
anno.shift(2 * DOWN)
self.add(anno)
self.play(FadeInFromPoint(square, point=i))
self.remove(anno, square)
Grow
----
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationGrowFromEdge.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationGrowFromEdge(Scene):
def construct(self):
for label, edge in zip(
["LEFT", "RIGHT", "UP", "DOWN"], [LEFT, RIGHT, UP, DOWN]
):
anno = TextMobject(f"Grow from {label} edge")
anno.shift(2 * DOWN)
self.add(anno)
square = Square()
self.play(GrowFromEdge(square, edge))
self.remove(anno, square)
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationGrowFromCenter.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationGrowFromCenter(Scene):
def construct(self):
square = Square()
anno = TextMobject("Grow from center")
anno.shift(2 * DOWN)
self.add(anno)
self.play(GrowFromCenter(square))
Diagonal Directions
-------------------
You can combine cardinal directions to form diagonal animations
.. raw:: html
<video width="560" height="315" controls>
<source src="_static/AnimationFadeInFromDiagonal.mp4" type="video/mp4">
</video>
.. code-block:: python
class AnimationFadeInFromDiagonal(Scene):
def construct(self):
square = Square()
for diag in [UP + LEFT, UP + RIGHT, DOWN + LEFT, DOWN + RIGHT]:
self.play(FadeInFrom(square, diag))
.. note::
You can also use the abbreviated forms like ``UL, UR, DL, DR``.
See :ref:`ref-directions`.

Some files were not shown because too many files have changed in this diff Show More