Тёмный
Science Club
Science Club
Science Club
Подписаться
3 задание с экзамена
18:45
9 часов назад
2 задание с экзамена.
21:48
12 часов назад
1 задание с экзамена.
23:13
12 часов назад
NormalDistributionVisualisation #shorts
0:30
14 дней назад
Метод простой итерации
1:39
3 месяца назад
Ошибки округления.
1:10
3 месяца назад
Значащие цифры числа.
0:23
3 месяца назад
Задача про частицу в яме.
15:12
5 месяцев назад
Комментарии
@user-og1gp2rp5q
@user-og1gp2rp5q 12 часов назад
СКОЛЬКО БЕД ПРИНЕСЛИ ПЕРЕХОДНЫЕ ПРОЦЕССЫ ПРИ ПЕРЕМЕЖАЮЩЕЙСЯ ДУГЕ , ВОЗНИКАЮЩЕЙ В МОМЕНТ ПОВРЕЖДЕНИЯ ВЫСОКОВОЛЬТНОЙ КАБЕЛЬНОЙ ЛИНИИ . ПОДСТРОИТЬ ИНДУКТИВНОСТИ КАТУШКИ В ЁМКОСТИ ЭЛЕКТРИЧЕСКИ СВЯЗАННОЙ СЕТИ НЕВОЗМОЖНО!. ПЕРЕНАПРЯЖЕНИЯ НА РЕГИСТРАТОРЕ ФИКСИРОВАЛИСЬ ДО 6, 7 ФАЗНЫХ.
@OnTheWayToTheDirection
@OnTheWayToTheDirection 16 часов назад
Код шейдера маски: Shader "Custom/Mask" { Properties { _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType" = "Opaque" "Queue" = "Geometry-1" // меняем очередь рендеринга, чтобы данный шейдер создавался раньше шейдера объекта за маской. } Blend Zero One // чтобы цвет возвращаемый шейдером игнорировался, а использовался цвет полученный перед этим ZWrite Off // Выключение записи в Zbuffer, чтобы наш невидимый объект никого не перекрывал Pass { Stencil { Ref 1 // ставим тут значение как в шейдере объекта(который должен быть виден из маски) Comp always // чтобы stencil тест проходил всегда независимо от Ref или значения буфера // Добавим stencil операцию(что сделать в случае прохождения теста): Pass replace // Эта операция возьмёт Ref-значение и запишет его в буфер } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; }; struct v2f { float4 vertex : SV_POSITION; }; fixed4 _Color; v2f vert(appdata_t v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); return o; } half4 frag(v2f i) : SV_Target { return _Color; } ENDCG } } Fallback "Diffuse" }
@OnTheWayToTheDirection
@OnTheWayToTheDirection 16 часов назад
Код шейдера объекта: // Create -> shader -> unlit shader то есть тот который не реагирует на освещение Shader "Custom/Object" { Properties { _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "Queue" = "Geometry" "RenderType" = "Opaque" } Stencil // примеры чтения из буфера и сравнения значения в буфферере с REF { /* // Объект виден: Ref 0 // помечает значения буфера с которым мы будем работать от 0 до 255 Comp Equal // операция сравнения для stencil теста */ // Объект НЕ виден: Ref 1 // помечает значения буфера с которым мы будем работать от 0 до 255 Comp Equal // операция сравнения для stencil теста } Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; half2 uv : TEXCOORD0; }; fixed4 _Color; sampler2D _MainTex; v2f vert(appdata_t v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } half4 frag(v2f i) : SV_Target { fixed4 c = tex2D(_MainTex, i.uv) * _Color; return c; } ENDCG } } Fallback "Diffuse" }
@UndeadXRUS
@UndeadXRUS 3 дня назад
Работает только с глобальным путем. Локальный никак не хочет воспринимать. Но все равно спасибо за ролик!)
@thunder90917
@thunder90917 5 дней назад
Как я тут оказался?)
@tearthes8765
@tearthes8765 13 дней назад
Визуал хорош, только хотелось бы не просто подставлять значения в формулу а понимать откуда она взялась как выводиться и т.д.
@OnTheWayToTheDirection
@OnTheWayToTheDirection 10 дней назад
Я вас услышал. Спасибо за ваш комментарий!!!
@kotmlg8753
@kotmlg8753 14 дней назад
завтра на экзамене проверю полученную информацию =)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 дней назад
Рад что пригодилось
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
Кстати, это же задача линейной регрессии и признаков, то есть иксов обычно сильно больше, чем один Вот здесь рассказывают, как с этим жить, досаточно простой вывод. ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BE%D0%B2
@gelub4045
@gelub4045 15 дней назад
🔥 как всегда
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
В ролике используются прикольные анимации, созданные через python, библиотека Manim. Привожу их код: 😁
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
#------------------------------------------------- Таблица со значениями. from manim import * class Approximation(Scene): def construct(self): text = Text( "# Даётся таблица:", font = BOLD ).move_to(LEFT*2.6 + UP*3) col_labels = [Text(str(i)) for i in range(6)] t = Table( [["i", "2", "3", "5", "7", "9"], ["3", "4.5", "6", "9", "16", "19"]], row_labels=[MathTex("x_i"), MathTex("y_i")], col_labels=col_labels, top_left_entry=MathTex("i").scale(1.5), include_outer_lines=True, # arrange_in_grid_config={"cell_alignment": RIGHT} ).next_to(text, DOWN).scale(0.9).shift(RIGHT*2) # Цвет ячейкам: t.add_highlighted_cell((1,1), color=GREY) t.add_highlighted_cell((1,2), color=GREY) t.add_highlighted_cell((1,3), color=GREY) t.add_highlighted_cell((1,4), color=GREY) t.add_highlighted_cell((1,5), color=GREY) t.add_highlighted_cell((1,6), color=GREY) t.add_highlighted_cell((1,7), color=GREY) t.add_highlighted_cell((2,1), color=GREY) t.add_highlighted_cell((3,1), color=GREY) g = VGroup(text, t) self.play(Write(g), run_time = 5) self.wait(5)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
#------------------------------------------------- 3д сцена с поверхностью from manim import * class Approximation(ThreeDScene): def construct(self): resolution_fa = 20 self.set_camera_orientation(phi=70 * DEGREES, theta=40 * DEGREES) axes = ThreeDAxes(x_range=(0, 10, 1), y_range=(0, 10, 1), z_range=(-8, 4, 0.5)).scale(0.7) axes.set_x_axis_label("a_0") axes.set_y_axis_label("a_1") axes.set_z_axis_label("S(x)") def param_surface(u, v): x = u y = v z = np.sin(x) * np.cos(y) return z surface_plane = Surface( lambda u, v: axes.c2p(u, v, param_surface(u, v)), resolution=(resolution_fa, resolution_fa), v_range=[0, 7], u_range=[0, 7], ) surface_plane.set_style(fill_opacity=1) surface_plane.set_fill_by_value(axes=axes, colorscale=[(RED, -0.5), (YELLOW, 0), (GREEN, 0.5)], axis=2) self.play(Write(axes), run_time = 4) self.play(Write(surface_plane), run_time = 4) self.wait(5)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
#------------------------------------------------- 2Д график с точками для аппроксимации. from manim import * class Approximation(Scene): def construct(self): # Задаем координаты точек x = ["1.1", "2", "3", "5", "7", "9"] y = ["3", "4.5", "6", "9", "16", "19"] # Создаем оси axes = Axes( x_range=[0, 10, 1], y_range=[0, 24, 2], x_length=8, y_length=6, x_axis_config={"numbers_to_include": np.arange(0, 11, 1)}, y_axis_config={"numbers_to_include": np.arange(0, 25, 2)}, tips=True ) # Создаем точки points = [] colors = [RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE] for i, (x_val, y_val) in enumerate(zip(x, y)): point = Dot( axes.coords_to_point(float(x_val), float(y_val)), radius=0.1, color=colors[i] ) points.append(point) # Добавляем оси и точки на сцену self.play(Write(axes), run_time=4) self.play(Write(VGroup(*points)), run_time=4) # Ожидаем завершения self.wait(5)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
#------------------------------------------------- # Строим функцию ошибки: from manim import * class Approximation(Scene): def construct(self): text = Text( "# Строим функцию ошибки:", font = BOLD ).move_to(LEFT*2.6 + UP*3) f = MathTex( "S = \sum_{i=1}^m (y_i - F_1(x_i))^2 \longrightarrow \min" ).next_to(text, DOWN) self.play(Write(text), run_time = 3) self.play(Write(f), run_time = 3) # Ожидаем завершения self.wait(5)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 15 дней назад
#------------------------------------------------- Частные производные равны 0 from manim import * class Approximation(Scene): def construct(self): text = Text( "# Ищем экстремумы функции ", font = BOLD ).move_to(LEFT*2.4 + UP*3) f = MathTex( "S(a_0, a_1):" ).next_to(text, RIGHT) # Результат: r1 = MathTex(r"\frac{\partial S(a_0, a_1)}{\partial a_0} = 0,") r2 = MathTex(r"\frac{\partial S(a_0, a_1)}{\partial a_1} = 0") grp2 = VGroup(r1, r2).arrange(DOWN, aligned_edge=LEFT) b = Brace(grp2, direction=LEFT) self.play(Write(text), run_time = 3) self.play(Write(f), run_time = 3) syst = VGroup(grp2, b).scale(1.25) self.play(Write(syst), run_time = 3) self.play(syst.animate.move_to(LEFT*4), run_time = 3) # Ожидаем завершения self.wait(5)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 16 дней назад
Код программы по поиску собственных значений: ```python import numpy as np import math # Выбрали начальное приближение: x = 3.6 y = 2.6 # Находим delt_X, delt_Y: delt = np.array([500,500]) # заранее инициализируем приращения tolerance = 0.0000000001 # желаемая точность i = 0 while max(delt) > tolerance: print("-"*40, f"iteration: {i}") # Уже для новых X и Y вычисляем приращения deltaX и delta Y: m1 = np.array([[4*x-y-5, -x], [1+3/x, -2*y]]) m2 = np.array([2*x**2 - x*y -5*x + 1, x + 3*math.log(x)-y**2]) # Основная формула: delt = - np.linalg.inv(m1) @ m2 # np.linalg.inv(m1) - обратная матрица print(f"delt_x: {delt[0]} delt_y: {delt[1]} ") # Корректируем значения: x += delt[0] y += delt[1] print(f"x: {round(x,4)},\ty: {round(y,4)} ") print(f"ERROR: {abs(max(delt))}") i += 1 #print("Решение:", f"({x}, {y})") ```
@OnTheWayToTheDirection
@OnTheWayToTheDirection 17 дней назад
Помогите разобраться, почему падающие шарики не бьются о преграды на пути :((((
@OnTheWayToTheDirection
@OnTheWayToTheDirection 17 дней назад
from manim import * from manim_physics import * from manim.utils.color import random_color import random class NormalDistributionVisualisation(SpaceScene): def construct(self): # Create 40 small circles inside the cone btw = RIGHT/3 num_circles = 12 circles = VGroup() for i in range(num_circles): for j in range(20): # вертикальная составляющая количества выкидываемых шаров circle = Circle(radius=0.08).shift(4*UP + UP*j - num_circles/2*btw + i*btw) circle.set_fill(random_color(), 1) circles.add(circle) self.add(circles) # Create the cone width = 8 height = 3.8 otverstie = 0.31 wall1 = Line([-width, height, 0], [-otverstie, 0.65, 0]) wall2 = Line([width, height, 0], [otverstie, 0.65, 0]) walls = VGroup(wall1, wall2).shift(UP*2) self.add(walls) # Create the obstacles obstacles = VGroup() btw_X = RIGHT*0.8 btw_Y = DOWN*0.8 H = 3 W = 14 for i in range(-H, H-2): for j in range(-W, W+1): r = Square().shift(btw_X * j, btw_Y * i).rotate(PI/4).scale(0.1) r.set_fill(GREY, 1) obstacles.add(r) obstacles.scale(0.7) self.add(obstacles) # Create the "Ш"-shaped container container = VGroup() container_width = 14 container_height = 4.4 container_left = Line([-container_width / 2, -container_height / 2, 0], [-container_width / 2, container_height / 2, 0]) container_right = Line([container_width / 2, -container_height / 2, 0], [container_width / 2, container_height / 2, 0]) container_bottom = Line([-container_width / 2, -container_height / 2, 0], [container_width / 2, -container_height / 2, 0]) n = 49 # количество отсеков step = container_width/n for i in range(0,n): x_from = -container_width / 2 + step*i y_from = -container_height / 2 x_to = -container_width / 2 + step*i y_to = container_height / 2 middle_line = Line([x_from, y_from, 0], [x_to, y_to, 0]) container.add(middle_line) container.add(container_left) container.add(container_right) container.add(container_bottom) container.shift(DOWN*2) self.add(container) # Add physics simulation self.make_rigid_body(*circles) self.make_static_body(obstacles) self.make_static_body(walls) self.make_static_body(container) self.wait(30) """ from manim import * from manim_physics import * # use a SpaceScene to utilize all specific rigid-mechanics methods class TwoObjectsFalling(SpaceScene): def construct(self): circle = Circle().shift(UP).scale(0.1) circle.set_fill(RED, 1) circle.shift(DOWN + RIGHT) wall1 = Line([-4, 3.5, 0], [0, 0, 0]) wall2 = Line([4, 3.5, 0], [0, 0, 0]) walls = VGroup(wall1, wall2) self.add(walls) self.play( DrawBorderThenFill(circle), ) self.make_rigid_body(circle) # Mobjects will move with gravity self.make_static_body(walls) # Mobjects will stay in place self.wait(5) # during wait time, the circle and rect would move according to the simulate updater """
@OnTheWayToTheDirection
@OnTheWayToTheDirection 17 дней назад
Команды для генерации анимации: manim main.py play_whole_scenario - полный рендер manim main.py -pql - быстрый рендер
@OnTheWayToTheDirection
@OnTheWayToTheDirection 17 дней назад
Python Manim скрипт, с помощью которого созданы некоторые анимации: from manim import * import math from math import cos from math import sin class MethodYacoby(MovingCameraScene): def construct(self): A = np.array([[1, 2, -1], [2, 3, 4], [-1, 4, 5]]) eps = 0.0001 # точность n = 3 eigenvalues = np.zeros(n) # Инициализируем вектор собственных значений #- self.play( Write(Text("Матрицы А:").to_corner(UL).scale(0.5)), Write(Text("Матрицы H:").to_corner(UR).scale(0.5)) ) #- # Повторяем вращения Якоби, пока не достигнем требуемой точности iteration = 0 while True: # Находим наибольший по модулю внедиагональный элемент max_off_diag = 0 p = q = 0 for i in range(n): for j in range(i+1, n): if abs(A[i, j]) > max_off_diag: max_off_diag = abs(A[i, j]) p, q = i, j #- _A = Matrix(A.round(2)).scale(0.6).move_to(LEFT*4.7 + DOWN*3*iteration) matrix_label = Text(f"Матрица A:",font=BOLD, font_size=13).next_to(_A, UP) i = Text(f"Итерация: {iteration}",font=BOLD, font_size=13).next_to(_A, LEFT).rotate(PI/2) self.play(Write(i)) self.play(Write(matrix_label)) self.play(Write(_A)) #- # Если внедиагональные элементы пренебрежимо малы, мы достигли сходимости if max_off_diag < eps: eigenvalues = np.diag(A) break # Вычисляем угол вращения Якоби theta = 0.5 * math.atan2(2 * A[p, q], A[p, p] - A[q, q]) #- inf_label = Text(f"Индексы максимального недиагонального элемента p = max_i = {p} q = max_j = {q} Максимальный недиагональный элемент: {max_off_diag}", font=BOLD, font_size=13).move_to(DOWN*3*iteration + UP/2) self.play(Write(inf_label)) #- #- ang_label = Text(f"Угол поворота = {round(theta, 2)} [радиан]",font=BOLD, font_size=13).next_to(inf_label, DOWN) self.play(Write(ang_label)) #- #- error_label = Text(f"Погрешность: {max_off_diag}, Требуемая точность: {eps}",font=BOLD, font_size=13).next_to(ang_label, DOWN) self.play(Write(error_label)) #- # Строим матрицу вращения H H = np.eye(n) # ? """ H = np.eye(3) = [[1, 0, 0], [0, 1, 0], [0, 0, 1]] """ H[p, p] = H[q, q] = math.cos(theta) H[p, q] = -math.sin(theta) H[q, p] = math.sin(theta) #- _H = Matrix(H.round(2)).scale(0.65).move_to(RIGHT*5.5 + DOWN*3*iteration) matrix_label = Text(f"Матрица поворота H:",font=BOLD, font_size=13).next_to(_H, UP) self.play(Write(matrix_label)) self.play(Write(_H)) #- self.play( self.camera.frame.animate.move_to(DOWN*3*(iteration+1)) ) # Применяем вращение к матрице A A = H.T @ A @ H iteration += 1 eigenvalues[0] eigenvalues[1] eigenvalues[2]
@OnTheWayToTheDirection
@OnTheWayToTheDirection 17 дней назад
Алгоритм Якоби python: ```python import numpy as np import math def jacobi_eigenvalues_H(A, eps=1e-10): n = 3 eigenvalues = np.zeros(n) # Инициализируем вектор собственных значений iteration = 0 # Повторяем вращения Якоби, пока не достигнем требуемой точности while True: # Находим наибольший по модулю внедиагональный элемент max_off_diag = 0 p = q = 0 for i in range(n): for j in range(i+1, n): if abs(A[i, j]) > max_off_diag: max_off_diag = abs(A[i, j]) p, q = i, j # Если внедиагональные элементы пренебрежимо малы, мы достигли сходимости if max_off_diag < eps: eigenvalues = np.diag(A) break # Вычисляем угол вращения Якоби theta = 0.5 * math.atan2(2 * A[p, q], A[p, p] - A[q, q]) # Строим матрицу вращения H H = np.eye(n) # ? H[p, p] = H[q, q] = math.cos(theta) H[p, q] = -math.sin(theta) H[q, p] = math.sin(theta) print("Матрица поворота:") print(H) # Применяем вращение к матрице A A = H.T @ A @ H iteration += 1 return eigenvalues A = np.array([[1, 2, -1], [2, 3, 4], [-1, 4, 5]]) eigenvalues = jacobi_eigenvalues_H(A) print("Собственные значения:", eigenvalues) ```
@OnTheWayToTheDirection
@OnTheWayToTheDirection 18 дней назад
Код python, библиотека manim: from manim import * import numpy as np class HalfIntervalMethod(MovingCameraScene): def construct(self): # Определение уравнения def f(x): return x**3 - 3*x**2 - 4 # Начальные границы интервала a = -5 b = 5 # Создание осей self.axes = Axes( x_range=[-5, 5, 1], y_range=[-50, 50, 10], x_length=10, y_length=10, x_axis_config={"numbers_to_include": np.arange(-5, 5, 1)}, y_axis_config={"numbers_to_include": np.arange(-50, 50, 10)}, tips=True, ).move_to(DOWN).scale(0.55) # Добавление подписей осей x_label = self.axes.get_x_axis_label("x").scale(0.6) y_label = self.axes.get_y_axis_label("f(x)").scale(0.6) # Добавление текста с постановкой задачи task_text = VGroup( MathTex("f(x) = x^3 - 3x^2 - 4"), MathTex("f(x) = 0").move_to(DOWN), MathTex("x = ?").move_to(DOWN*2) ).scale(0.75) self.play(Write(task_text)) self.wait(2) self.play(task_text.animate.scale(0.6).to_corner(UL)) # Построение графика функции graph = self.axes.plot(f, color=BLUE) self.play(Create(self.axes), run_time=2) self.play(Create(x_label), Create(y_label)) self.play(Create(graph)) # Вычисление решения методом половинного деления iterations = 0 tolerance = 0.4
@OnTheWayToTheDirection
@OnTheWayToTheDirection 18 дней назад
while abs(b - a) > tolerance: """ # Показываем вычисления: f1 = Text(f"a = {a}") f2 = Text(f"b = {b}").next_to(f1, direction=DOWN/2) f3 = Text(f"f(a) = {f(a)}").next_to(f2, direction=DOWN/2) f4 = Text(f"b = {b}").next_to(f3, direction=DOWN/2) f5 = Text(f"f(b) = {f(b)}").next_to(f4, direction=DOWN/2) f6 = MathTex("c = \\frac{|b-a|}{2}").next_to(f5, direction=DOWN/2) f7 = Text(f"f(c) = {f((abs(b-a)/2))}").next_to(f6, direction=DOWN/2) g = VGroup(f1,f2,f3,f4,f5,f6,f7).scale(0.4).to_corner(DR) self.play(Create(g)) """ # Находим среднее: c = (a + b) / 2 if iterations == 0: a_Dot = self.createDot("a", a, 0, RED) b_Dot = self.createDot("b", b, 0, RED) self.play(Create(a_Dot)) self.play(Create(b_Dot)) c_Dot = self.createDot("c", c, 0, GREEN) self.play(Create(c_Dot)) # Скрываем вычисления: # self.play(FadeOut(g)) # Двигаем камеру и приближаем: self.camera.frame.save_state() self.play( self.camera.frame.animate.move_to(self.axes.coords_to_point(c, f(c))).set(width=12-iterations*2) ) self.wait(1) # Показываем точность: if (iterations <= 1): if c < 3.355: brace = BraceBetweenPoints(self.axes.coords_to_point(3.355, 0), self.axes.coords_to_point(c, 0)) else: brace = BraceBetweenPoints(self.axes.coords_to_point(c, 0), self.axes.coords_to_point(3.355, 0)) self.play(Create(brace)) text = Text( "Погрешность", color = ORANGE ).scale(1/(iterations+3)) text.next_to(brace, direction=UP/(iterations+3)) self.play(Create(text)) self.wait(2) self.play(FadeOut(brace), FadeOut(text)) else: self.wait(3) # Двигаем границу интервала: if (abs(b - a) <= tolerance*2): self.play(FadeOut(a_Dot), FadeOut(b_Dot)) break if f(a) * f(c) < 0: self.play( b_Dot.animate.move_to(c_Dot.get_center()), FadeOut(c_Dot), run_time = 2 ) b = c else: self.play( a_Dot.animate.move_to(c_Dot.get_center()), FadeOut(c_Dot), run_time = 2 ) a = c iterations += 1 # Меняем размеры точек: """ self.play( a_Dot[0].animate.scale(1/iterations), b_Dot[0].animate.scale(1/iterations), ) """ # Подсчет результата: result = abs(b-a)/2 # Возвращаем камеру в исходную позицию self.play( self.camera.frame.animate.move_to(self.axes.coords_to_point(0, 0)).set(width=10) ) self.wait(2) def createDot(self, label_text, x, y, dot_color=WHITE, dot_position=DOWN/2.3): dot = Dot(color=dot_color).move_to(self.axes.coords_to_point(x, y)) label = MathTex( label_text, # f" = {x}", color=dot_color).move_to(dot.get_center() + dot_position).scale(0.7) return VGroup(dot, label)
@user-on5jf5io8z
@user-on5jf5io8z Месяц назад
Один из самых крутых преподов в вузе 🔥🔥🔥
@OnTheWayToTheDirection
@OnTheWayToTheDirection Месяц назад
Солидарен🎉
@OnTheWayToTheDirection
@OnTheWayToTheDirection Месяц назад
Code Snippet: from manim import * from math import log2 class MovingAndZoomingCamera(MovingCameraScene): def construct(self): self.camera.frame.save_state() # 1. Построение графика и осей: axes = Axes( x_range=[-11, 11, 1], y_range=[-11, 11, 1], x_length = 7, y_length = 7, axis_config={"color": BLUE}, ).move_to(LEFT*3) labels = axes.get_axis_labels(x_label="x", y_label="y") graph = axes.plot(lambda x: (x/2)**3, x_range=[-4, 4], color=GREEN) self.play(Create(axes, run_time = 4)) self.play(Write(labels)) self.play(Create(graph)) # показываем что мы ищем: reshenie_dot = Dot(axes.coords_to_point(0,0), color = PINK).scale(0.8) podpis = MathTex("x^*", color = PINK).move_to(reshenie_dot.get_center() + LEFT/2.5 + UP/2.5).scale(0.8) self.play( Create(reshenie_dot), Write(podpis), run_time = 2 ) self.wait() # 2. Построение крайних значений функции: # -------------------------------------------------------- Rpoint = Dot().move_to(axes.coords_to_point(4, 8)) self.play(Create(Rpoint)) # * self.wait() R_point_proecsia = Dot().move_to(axes.coords_to_point(4, 0)) # точка проекц на ось Х. R_point_proecsia.scale(0.5) R_Dline = DashedLine( # пунктирная линия Rpoint.get_center(), R_point_proecsia.get_center() ) # -------------------------------------------------------- Lpoint = Dot().move_to(axes.coords_to_point(-4, -8)) self.play(Create(Lpoint)) # * self.wait() L_point_proecsia = Dot().move_to(axes.coords_to_point(-4, 0)) # точка проекц на ось Х. L_point_proecsia.scale(0.5) L_Dline = DashedLine( # пунктирная линия Lpoint.get_center(), L_point_proecsia.get_center() ) self.play(Create(L_Dline), Create(L_point_proecsia), Create(R_Dline), Create(R_point_proecsia)) self.wait() # -------------------------------------------------------- # 3. Подписываем крайние точки: L_label = MathTex("x_{a}").move_to(L_point_proecsia.get_center() + UP/3).scale(0.6) R_label = MathTex("x_{b}").move_to(R_point_proecsia.get_center() + DOWN/3).scale(0.6) self.play(Create(L_label), Create(R_label)) self.wait() # 4. Проводим касаетльную #- R_label_new = MathTex("x_{0}", color = RED).move_to(R_point_proecsia.get_center() + DOWN/3).scale(0.6) self.play(Transform(R_label, R_label_new), Flash(R_label_new, flash_radius=0.25), run_time = 3) #- target_point = Dot().move_to(axes.coords_to_point(2.667, 0)).scale(0.5) casatelnaya = Line( axes.coords_to_point(4, 8), target_point.get_center(), color = BLUE ) x1_text = MathTex("x_{1}", color = RED).move_to(target_point.get_center() + DOWN/3).scale(0.5) # self.play(self.camera.frame.animate.move_to(casatelnaya).set(width=10)) self.play(Create(casatelnaya), Create(target_point)) self.play(Create(x1_text)) self.wait() # 5. Начинаем писать формулу: angle = Angle( axes.x_axis, # направление 1 Line(axes.coords_to_point(2.667, 0), axes.coords_to_point(4, 8)), # направление 2 radius=0.2, color = ORANGE ) value = MathTex(r"\alpha", color = ORANGE).move_to(angle.get_center() + UP/5 + RIGHT/7).scale(0.7) self.play(Create(angle), Create(value)) L1 = MathTex( "x_1 - x_0", " = ", "-", r"AB", r"\cdot", r"\cos(", r"\alpha", ")" ).move_to([4,3,0]) L1[0].color = RED L1[2].color = RED L1[3].color = BLUE L1[6].color = ORANGE # 6. Обозначения для касательно A = Text("A", color=BLUE).move_to(x1_text.get_center()).scale(0.6) B = Text("B", color=BLUE).move_to(Rpoint.get_center()+UP/3+RIGHT/6).scale(0.6) self.play(Write(L1)) self.play( ReplacementTransform(x1_text, A), # не используй Transform!!!! Flash(x1_text, flash_radius=0.25), run_time = 3 ) self.play(Create(B)) self.wait() self.play(Wiggle( VGroup( A, B, casatelnaya, L1[3] ) ), run_time = 2) self.wait()
@OnTheWayToTheDirection
@OnTheWayToTheDirection Месяц назад
# 7. отмечаю f(x_0) на оси Y: R_point_proecsia_y = Dot().move_to(axes.coords_to_point(0, 8)).scale(0.5) F_ot_X_dashLIne = DashedLine( # пунктирная линия Rpoint.get_center(), R_point_proecsia_y.get_center() ) self.play(Create(R_point_proecsia_y), Create(F_ot_X_dashLIne), run_time = 2) self.wait() # 8. Подписываем значение. f_ot_x_Label = MathTex("f(x_0)", color = GREEN).move_to(R_point_proecsia_y.get_center()+LEFT/1.8).scale(0.7) self.play(Create(f_ot_x_Label)) self.wait() # 9. Меняем формулу L2 = MathTex( "x_1 - x_0", " = ", "-", r"\frac{f(x_0)}{\sin(\alpha)}", r"\cdot", r"\cos(", r"\alpha", ")" ).move_to(L1.get_center() + DOWN).scale(0.7) L2[0].color = RED L2[3].color = BLUE L2[6].color = ORANGE self.play(Create(L2), run_time = 3) self.wait() L3 = MathTex( "x_1 - x_0", " = ", "-", r"f(x_0) \cdot", r"ctg(", r"\alpha", ")" ).move_to(L2.get_center() + DOWN).scale(0.7) L3[0].color = RED L3[-2].color = ORANGE self.play(Create(L3), run_time = 3) self.wait() L4 = MathTex( "x_1 - x_0", " = ", "-", r"\frac{f(x_0)}{tg(\alpha)}", ).move_to(L3.get_center() + DOWN).scale(0.7) L4[0].color = RED L4[2].color = RED L4[3][-2:-1].color = ORANGE self.play(Create(L4), run_time = 3) self.wait() L5 = MathTex( "x_1 - x_0", " = ", "-", r"\frac{f(x_0)}{f'(x_0)}", ).move_to(L4.get_center() + DOWN).scale(0.7) L5[0].color = RED L5[2].color = RED self.play(Create(L5), run_time = 3) self.wait() L6 = MathTex( "x_1", " = ", "x_0" "-", r"\frac{f(x_0)}{f'(x_0)}", ).move_to(L5.get_center() + DOWN).scale(0.7) L6[0].color = RED L6[2].color = RED self.play(Create(L6), run_time = 3) self.wait() self.play(FadeOut(VGroup(L1,L2,L3,L4,L5))) self.play(L6.animate.move_to(L1.get_center())) self.play(L6.animate.scale(1.4)) self.wait() # 10. Подготовка к построению 2ой касательной: self.play(self.camera.frame.animate.move_to(axes.coords_to_point(2,0)).set(width=10)) self.wait() # 11. Убираем лишние обозначения: self.play(FadeOut(casatelnaya, B, angle, value), run_time = 2) x1_text = MathTex("x_{1}", color = RED).move_to(target_point.get_center() + DOWN/3).scale(0.5) self.play( ReplacementTransform(A, x1_text), # не используй Transform!!!! Flash(x1_text, flash_radius=0.25), run_time = 3 ) self.wait() # 12. Снова делаем необходимые построения: Rpoint = Dot().move_to(axes.coords_to_point(2.667, 2.45)).scale(0.5) R_point_proecsia_y = Dot().move_to(axes.coords_to_point(0, 2.45)).scale(0.5) target_point = Dot().move_to(axes.coords_to_point(1.777, 0)).scale(0.5) F_ot_X_dashLIne = DashedLine( # пунктирная линия Rpoint.get_center(), R_point_proecsia_y.get_center() ) F_to_X_dashLIne = DashedLine( # пунктирная линия Rpoint.get_center(), axes.coords_to_point(2.667, 0) ) casatelnaya = Line( Rpoint.get_center(), target_point.get_center(), color = BLUE ) f_ot_x_Label = MathTex("f(x_1)", color = GREEN).move_to(R_point_proecsia_y.get_center()+LEFT/1.8).scale(0.7) x2_text = MathTex("x_{2}", color = RED).move_to(target_point.get_center() + DOWN/3).scale(0.4) self.play( Create(f_ot_x_Label), Create(F_to_X_dashLIne), Create(F_ot_X_dashLIne), Create(casatelnaya), Create(x2_text), Create(R_point_proecsia_y), Create(target_point), Create(Rpoint), run_time = 3 ) self.wait()
@OnTheWayToTheDirection
@OnTheWayToTheDirection Месяц назад
# 13. Снова записываем формулу: self.play(Restore(self.camera.frame)) # перемещение камеры на исходную позицию L7 = MathTex( "x_2", " = ", "x_1" "-", r"\frac{f(x_1)}{f'(x_1)}", ).move_to(L6.get_center() + DOWN*1.3) L7[0].color = RED L7[2].color = RED self.play(Create(L7)) self.wait() # 14. Продолжаем её до n: L8 = MathTex( "..." ).move_to(L7.get_center() + DOWN) self.play(Create(L8)) self.wait() L9 = MathTex( "x_n", " = ", "x_{n-1}" "-", r"\frac{f(x_{n-1})}{f'(x_{n-1})}", ).move_to(L8.get_center() + DOWN) L9[0].color = RED L9[2].color = RED self.play(Create(L9)) self.wait(10)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Ролик создан с использованием библиотеки manim python. Вот код: from manim import * class MyScene(Scene): def construct(self): """FILM:""" #self.showGrid() title = Text( "Метод простой итерации для систем линейных алгебраических уравнений.", font_size=20, font = ITALIC ).move_to(UP*3.5) self.play(Write(title)) self.wait(2) MainPosition = LEFT*4 + UP system1 = self.createSystem( MathTex(r"10x_1 + 3x_2 + 3x_3 = 9,"), MathTex(r"x_1 + 20x_2 + x_3 = 2,"), MathTex(r"3x_1 - 8x_2 + 30x_3 = 1;") ).move_to(MainPosition) self.play(FadeIn(system1)) self.wait() title1 = Text( "Строим итерационную последовательность: (для этого выразим x1,x2,x3 из 1,2 и 3 уравнений системы)", font_size=18, font = ITALIC ).move_to(system1.get_corner(UP) + UP/2 + RIGHT) self.play(Write(title1)) self.wait(2) system2 = self.createSystem( MathTex(r"x_1 = 0.9 - 0.3x_3 - 0.3x_2,"), MathTex(r"x_2 = 0.1 - 0.05x_1 - 0.05x_3,"), MathTex(r"x_3 = \frac{1}{30} - 0.1x_1 + \frac{8}{30}x_2;") ).move_to(MainPosition).scale(0.7) self.play(Transform(system1, system2)) arrow = MathTex(r"\Rightarrow", font_size = 50) arrow.move_to(UP*1) self.play(Create(arrow)) title3 = Text( "Наша итерационная последовательность:", font_size=18, font = ITALIC ).move_to(RIGHT*3.5 + UP*2.5) self.play(Write(title3)) system3 = self.createSystem( MathTex(r"x_1^{k+1} = 0.9 - 0.3x_3^{k} - 0.3x_2^{k},"), MathTex(r"x_2^{k+1} = 0.1 - 0.05x_1^{k} - 0.05x_3^{k},"), MathTex(r"x_3^{k+1} = \frac{1}{30} - 0.1x_1^{k} + \frac{8}{30}x_2^{k};") ).move_to(RIGHT*3.5 + UP).scale(0.7) self.play(FadeIn(system3)) title4 = Text( "k - это номер текущей итерации.", font_size=20, font = ITALIC ).move_to(RIGHT*3.5 - UP) self.play(Write(title4)) self.wait(2) self.play(FadeOut(title4)) title2 = Text( "Теперь заполняем таблицу:", font_size=18, font = ITALIC ).move_to(system2.get_corner(DOWN) + DOWN/2) self.play(Write(title2)) table = Table( [ ["0", "0", "0", "-"], ["0.9","0.1","1/30", "0.9"], ["0.86", "0.053", "-0,03", "0,063"], ], row_labels=[Text("1"), Text("2"), Text("3")], col_labels=[MathTex(r"x_1"), MathTex(r"x_2"), MathTex(r"x_3"), Text("точность")], top_left_entry=Text("k(итерация)"), include_outer_lines=True ) table.move_to(LEFT*3 + DOWN*1.6) table.scale(0.4) #self.play(table.create()) lg = [ Text( "На 1 итерации произвольно выбираем x1, x2, x3. И подставляем их в правую часть нашей системы. Тем самым находим новые значения x1, x2, x3.(Более точные)", font_size = 17, color = YELLOW, font = ITALIC ).move_to(RIGHT*2.8 + DOWN*2), ] lg[0][93:130].color = BLUE # Анимация построчного заполнения таблицы rows = table.get_rows() for i, row in enumerate(rows,0): for j, cell in enumerate(row, 0): self.play(Write(cell)) if (i == 2) and (j == len(row)-1): env = VGroup( SurroundingRectangle(rows[2][4], color=BLUE), Text("точность = max{ |0.9 - 0| , |0,1 - 0|, |1/30 - 0| } = 0,9", font_size=15, color=BLUE).move_to(RIGHT*2.5 + DOWN*2.4) ) self.play(Create(env)) self.wait() self.play(FadeOut(env)) if (i == 3) and (j == len(row)-1): env = VGroup( SurroundingRectangle(rows[3][4], color=BLUE), Text("точность = max{ |0.86 - 0.9| , |0.053 - 0.1|, |-0.03 - 1/30| } = 0.063", font_size=15, color=BLUE).move_to(RIGHT*1 + DOWN*3) ) self.play(Create(env)) self.wait() self.play(FadeOut(env)) if (i == 1): env = VGroup( SurroundingRectangle(row[1:4]), SurroundingRectangle(rows[2][1:4], color=BLUE), Rectangle(height=2, width=0.7, color=BLUE).move_to(Point([1.6,1,0])), Rectangle(height=2, width=3.45, color=YELLOW).move_to(Point([4.19,1,0])), lg[0] ) self.play(FadeIn(env)) self.wait(2) self.play(FadeOut(env)) if (i == 2): env = VGroup( SurroundingRectangle(row[1:4]), SurroundingRectangle(rows[3][1:4], color=BLUE), Rectangle(height=2, width=0.7, color=BLUE).move_to(Point([1.6,1,0])), Rectangle(height=2, width=3.45, color=YELLOW).move_to(Point([4.19,1,0])), Text( "Подставляем x1, x2, x3 в правую часть нашей системы. Тем самым находим новые значения x1, x2, x3.(Более точные)", font_size = 19, color = YELLOW, font = ITALIC ).move_to(RIGHT*3 + DOWN*3), ) self.play(FadeIn(env)) self.wait(2) self.play(FadeOut(env)) title5 = Text( "Как только достигаем необходимой точности, записываем ответ.", color=GREEN, font_size=20, font = ITALIC ).move_to(table.get_corner(DOWN)+ DOWN/2 + RIGHT*1.5) self.play(Write(title5)) self.wait(4) all = VGroup(arrow, title1, title2, title3, system2, system3, title4, title5, table) attantion_svg = SVGMobject("Useful resourses/attantion.svg").move_to(system1.get_corner(RIGHT) + RIGHT*1).scale(0.2) self.play(Transform(all, attantion_svg)) title1 = Text( "Возвращаем исходную систему:", font_size=18, font = ITALIC ).move_to(system1.get_corner(UP) + UP/2) self.play(Write(title1)) self.wait() syst = self.createSystem( MathTex(r"10x_1 + 3x_2 + 3x_3 = 9,"), MathTex(r"x_1 + 20x_2 + x_3 = 2,"), MathTex(r"3x_1 - 8x_2 + 30x_3 = 1;") ).move_to(MainPosition) self.play(Transform(system2, syst), Transform(system1, syst)) title2 = Text( "Условие сходимости метода:", font_size=18, font = ITALIC ).move_to(attantion_svg.get_corner(RIGHT) + RIGHT*2) self.play(Write(title2)) title3 = Text( "ДИАГОНАЛЬНОЕ ПРЕОБЛАДАНИЕ МАТРИЦЫ СИСТЕМЫ. В математике квадратная матрица считается диагонально-преобладающей, если для каждой строки матрицы значение элементов на главной диагонали больше или равно сумме значений всех остальных (не принадлежащих главной диагонали) элементов в этой строке.", font_size=17, font=ITALIC ).move_to(DOWN+LEFT/3) self.play(Write(title3)) self.wait(2) formula = MathTex( r"\mid a_{ii} \mid \geq \sum_{i eq j} \mid a_{ij} \mid, \forall i=1,..,n for A_{nn}" ) formula.move_to(title3.get_corner(DOWN) + DOWN*1.5) self.play(Write(formula)) self.wait(2) title100 = Text( "В нашем случае: |10| >= |3| + |3| |20| >= |1| + |1| |30| >= |3| + |-8| У нас система с дианональным преобладанием.", font_size=16, font=ITALIC ).move_to(attantion_svg.get_corner(DOWN) + DOWN/1.5 + RIGHT*3) self.play(Write(title100)) self.wait(9) Быстрый рендер: manim main.py -pql Нормальный рендер: manim main.py play_whole_scenario
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Ролик создан с использованием библиотеки manim python. Вот код: from manim import * class MyScene(Scene): def construct(self): # self.showGrid() # Постановка задачи: Zadanie = Text( "Имея измеренное расстояние от Земли до Луны, необходимо вычислить абсолютную и относительную погрешность измерения. Предположим, что при измерении расстояния использовался лазерный измерительный прибор, который при попадании луча на Луну отразил его обратно на Землю, но из-за неблагоприятных атмосферных условий (например, плотный туман) произошло искажение измерений.", font_size=15, font="Comic Sans MS" ).move_to(UP*3.2) self.play(Write(Zadanie), run_time = 4) self.wait() # Задаем POINTS: start = np.array([-5.5,-2.5,0]) end = np.array([-4,2,0]) mid = (start + end)/2 # Загрузка .svg файлов для Земли и Луны earth_svg = SVGMobject("Useful resourses/earth.svg").move_to(start) moon_svg = SVGMobject("Useful resourses/moon.svg").move_to(end).scale(0.5) creatig_pivot = Point() line_svg = SVGMobject("Useful resourses/line.svg").move_to(creatig_pivot).scale(0.25) # Показываем Землю и Луну: self.play(FadeIn(earth_svg), FadeIn(moon_svg)) self.wait() # Показываем линейку: self.play(FadeIn(line_svg)) self.wait() # Перемещаем линейку: target_pivot = mid + RIGHT/2 self.play(line_svg.animate.move_to(target_pivot)) self.play(line_svg.animate.rotate(PI/2.5,about_point=target_pivot)) # Подпись у линейки: a = MathTex( r" vert d_{measured} vert = 384'400 km", font_size = 20 ).move_to(mid + UP + LEFT) self.play(Write(a)) # Предисловие решения: dist_formula = MathTex(r" vert d_{measured} vert = 384'400 km") wrong_formula = MathTex(r"\Delta d = 100 km") predislovie = self.WriteMathTextGPT( np.array([1,2.5,0], dtype=np.float32), mathematical_text = [ Text("Пусть измеренное расстояние от земли до Луны составляет:"), dist_formula, Text("Предположим, что дополнительная погрешность измерения составляет:"), wrong_formula, Text("из-за атмосферных условий."), ], text_size = 18) self.wait() b = MathTex( r"\pm 100 km", font_size = 20 ).move_to(end + RIGHT) self.play(Write(b)) self.wait() # Красивый эффект обводки2: framebox1 = SurroundingRectangle(dist_formula, buff=0.05) framebox2 = SurroundingRectangle(a, buff=0.05) self.play(FadeIn(framebox1), FadeIn(framebox2)) self.wait() self.play(FadeOut(framebox1), FadeOut(framebox2)) # Красивый эффект обводки2: framebox1 = SurroundingRectangle(wrong_formula, buff=0.05) framebox2 = SurroundingRectangle(b, buff=0.05) self.play(FadeIn(framebox1), FadeIn(framebox2)) self.wait() self.play(FadeOut(framebox1), FadeOut(framebox2)) # Вычисляем абсолютную погрешность: abs_wrong_formula = MathTex(r"\Delta d = vert d_{measured} - d_{accurate} vert = vert 384'400 - 384'500 vert = 100 km") text = self.WriteMathTextGPT( np.array([2,0,0], dtype=np.float32), mathematical_text = [ Text("1. Абсолютная погрешность - это разница между измеренным значением и точным значением."), abs_wrong_formula ], text_size = 20 ) self.wait() # Красивый эффект обводки3: framebox1 = Rectangle(width=1.4, height=0.5, color=BLUE).move_to(np.array([1,-0.5,0])) self.play(FadeIn(framebox1)) self.play(Write(Text( "точное значение расстояния", color=BLUE, font_size=15 ).move_to(np.array([1, -1.4, 0])))) self.wait() # Вычисляем относительную погрешность: text = self.WriteMathTextGPT( np.array([2,-1.9,0], dtype=np.float32), mathematical_text = [ Text("2. Относительная погрешность - это отношение абсолютной погрешности к точному значению."), MathTex(r"\varepsilon &= \frac{\Delta d}{d_{\text{accurate}}} \times 100\% = \frac{100\text{km}}{384'500\text{ km}} \times 100\% \approx 0.026\%") ], text_size = 20 ) framebox2 = Rectangle(width=1.4, height=0.475, color=BLUE).move_to(np.array([-0.9,-2.7,0])) self.play(FadeIn(framebox2)) self.wait(8) def WriteMathTextGPT(self, position : Point, mathematical_text : list, text_size : int): # Задаем начальную позицию # position = np.array([4, 0, 0]) assert text_size >= 5 # Отрисовываем каждую строку текста for i, item in enumerate(mathematical_text): if (type(item) == MathTex): item.font_size = text_size*1.7 elif (type(item) == Text): item.font_size = text_size-4 else: raise Exception("Непонятный формат(тип) элемента!!!") item.move_to(position) self.play(Write(item)) # отрисовка! self.wait(0.5) # задержка! # Перемещаем следующий элемент под текущим if i < len(mathematical_text) - 1: position += np.array([0, -text_size/38, 0], dtype=np.float32) # Явное преобразование типа данных в int32 # аналог: +DOWN v = VGroup() for stroka in mathematical_text: v.add(stroka) return v def showGrid(self): # Создаем сетку grid = NumberPlane() grid.set_opacity(0.5) # Устанавливаем прозрачность сетки # Добавляем координаты около каждой точки сетки for x in range(-7, 8): # Итерируем по x-координатам for y in range(-4, 5): # Итерируем по y-координатам text = Text(f"({x}, {y})").scale(0.3) # Создаем текст с координатами text.next_to(grid.coords_to_point(x, y), DOWN, buff=0.1) # Размещаем текст около точки сетки self.add(text) # Добавляем текст на сцену # Отображаем сетку и координаты self.add(grid) Быстрый рендер: manim main.py -pql Нормальный рендер: manim main.py play_whole_scenario
@havayou_dengy
@havayou_dengy 3 месяца назад
Чегоооооооо😮😮😮😮😮😮😮😮😮😮😮
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
:)😊
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Ждите новые ролики по числакам
@gelub4045
@gelub4045 3 месяца назад
Нельзя снять шедевр на 1 минуту 10 секунд Так же эта имба:
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
😂
@user-do8sb2ol6e
@user-do8sb2ol6e 3 месяца назад
отличное интро
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Спасибо 🎉!!!
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Ролик создан с использованием библиотеки manim python. Вот код: from manim import * class SlantsExample(Scene): def construct(self): # Название видео вверху экрана: init = Text( "Приведем пример, когда ошибки округления сильно влияют на ответ:", slant=ITALIC, font_size=24, ).to_corner(UP) # a[0:14].set_color(BLUE) self.play(Write(init), run_time=2) self.wait(2) # Показываем 1ую систему: preview = Text( "Рассмотрим систему:", slant=ITALIC, font_size=24, ).shift(LEFT+UP) self.play(Write(preview), run_time=2) eq1 = MathTex("3x - 7,0001y = 0,9998") eq2 = MathTex("3x - 7y = 1") grp1 = VGroup(eq1, eq2).arrange(DOWN, aligned_edge=LEFT) b1 = Brace(grp1, direction=LEFT) self.play(Write(b1)) self.play(Write(grp1)) calc = Text( "Решение:", slant=ITALIC, font_size=24, ).next_to(eq1, RIGHT*2 + UP) self.play(Write(calc)) # Результат: r1 = MathTex("x = 5,") r2 = MathTex("y = 2;") grp2 = VGroup(r1, r2).arrange(DOWN, aligned_edge=LEFT).next_to(calc, DOWN) b2 = Brace(grp2, direction=LEFT) self.play(Write(b2)) self.play(Write(grp2)) self.wait(1) # переход от 1 системе ко 2ой: S1 = VGroup(preview, grp1, b1, grp2, b2, calc) self.play(S1.animate.scale(0.5)) self.play(S1.animate.shift(UP*2)) S2 = S1.copy() self.play(S2.animate.shift(DOWN*2)) self.play(S2.animate.scale(2)) # Заменяем коэффициенты в S2: new_text = Text("Немного изменим коэффициенты системы:", font_size=24).shift(UP+LEFT) self.play(ReplacementTransform(S2[0], new_text)) self.wait(2) one = MathTex("1") first_equalation = S2[1][0].get_center() one.move_to(first_equalation + RIGHT*1.3) # Устанавливаем позицию для one new_text = Text("Слегка изменим коэффициенты системы:", font_size=24) self.play(ReplacementTransform(S2[1][0][0][-6:], one)) self.wait(3) # Тогда и решение поменяется: new_x = MathTex(r"\frac{1}{3}") new_y = MathTex(r"0") grp2 = S2[3] r1 = grp2[0][0] # 1ое ураынение r2 = grp2[1][0] # 2ое ураынение # задаем позицию для появления нового X: new_x.move_to(r1.get_center() + RIGHT/2) new_x.scale(0.5) # Увеличиваем размер шрифта в 2 раза # задаем позицию для появления нового Y: new_y.move_to(r2.get_center() + RIGHT/2) self.play(ReplacementTransform(r1[-2:], new_x)) self.play(ReplacementTransform(r2[-2:], new_y)) self.wait(3) # Добавляются подвижные рамки """calc = S2[-1] self.play(calc.animate.shift(UP/6))""" grp2_old = S1[3] grp2_new = S2[3] framebox1 = SurroundingRectangle(grp2_old, buff=.05, color=BLUE) framebox2 = SurroundingRectangle(grp2_new, buff=.05, color=BLUE) grp1_old = S1[1][0][0][-6:] grp1_new = S2[1][0][0][-1:] framebox3 = SurroundingRectangle(grp1_old, buff=.05, color=RED) framebox4 = SurroundingRectangle(grp1_new, buff=.05, color=RED) self.play(Create(framebox1), Create(framebox2), Create(framebox3), Create(framebox4)) self.wait(3) # Финальная часть: preview = Text( "При малейшем изменении коэффициентов системы, мы получили совершенно другое решение. Бывает так, что при малейшем изменении коэффициентов, система становится НЕрешаемой.", slant=ITALIC, font_size=20, color = BLUE ).shift(DOWN*2) self.play(Write(preview), run_time=4) self.remove(FadeOut(framebox1), FadeOut(framebox2), FadeOut(framebox3), FadeOut(framebox4)) self.wait(8) Быстрый рендер: manim main.py -pql Нормальный рендер: manim main.py play_whole_scenario
@OnTheWayToTheDirection
@OnTheWayToTheDirection 3 месяца назад
Ролик создан с использованием библиотеки manim python. Вот код: from manim import * class SlantsExample(Scene): def construct(self): a = Text( "Значащей цифрой называют 1-ую слева, отличную от нуля цифру и все последующие за ней.", slant=ITALIC, font_size=24, ).shift(UP*2 + LEFT) a[0:14].set_color(BLUE) self.play(Write(a), run_time=6) self.wait(1) b = Text( "Пример:", slant=ITALIC, font_size=24 ).to_corner(LEFT) # .next_to(a, DOWN) b.shift(UP) self.play(Write(b)) self.wait(1) equation1 = MathTex("0,0", "7231",) equation2 = MathTex("1,23").next_to(equation1, DOWN) equation3 = MathTex("0,00", "720").next_to(equation2, DOWN) self.play(Write(equation1)) self.play(Write(equation2)) self.play(Write(equation3)) framebox1 = SurroundingRectangle(equation1[1], buff=.05, color=BLUE) framebox2 = SurroundingRectangle(equation2[0], buff=.05, color=BLUE) framebox3 = SurroundingRectangle(equation3[1], buff=.05, color=BLUE) # Создается анимация self.play(Create(framebox1)) # с созданием рамки self.play(Create(framebox2)) # с созданием рамки self.play(Create(framebox3)) # с созданием рамки n = Text( "Значащие цифры.", slant=ITALIC, color=BLUE, font_size=16, ).next_to(equation2, RIGHT) self.play(Write(n)) self.wait(7) Быстрый рендер: manim main.py -pql Нормальный рендер: manim main.py play_whole_scenario
@aleksandr_t
@aleksandr_t 5 месяцев назад
А можно ссылку на задачу?
@OnTheWayToTheDirection
@OnTheWayToTheDirection 5 месяцев назад
Telegram 89207711156
@Engineering71
@Engineering71 5 месяцев назад
Во музончик поставил )
@OnTheWayToTheDirection
@OnTheWayToTheDirection 5 месяцев назад
Постарался)
@user-xn8ru9fe7w
@user-xn8ru9fe7w 6 месяцев назад
блин, ты даже в праздники продолжаешь выкладывать видео😳 балуешь нас слишком
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Экзамен 12го
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Я бы уже не против отдохнуть… Каникулы 20го января у нас
@user-xn8ru9fe7w
@user-xn8ru9fe7w 6 месяцев назад
это математика в асмр🤩👂🏻
@user-xn8ru9fe7w
@user-xn8ru9fe7w 6 месяцев назад
у тебя очень приятный голос😍
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Спасибо
@user-xn8ru9fe7w
@user-xn8ru9fe7w 6 месяцев назад
я давно слежу за твоим каналом, благодаря тебе стала преподавателем математики, спасибо!!
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Как это возможно? Я ещё даже не стал))) 2 курс только
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
1 часть - habr.com/ru/articles/557424/
@-chessmatics
@-chessmatics 6 месяцев назад
Очень интересно. С удовольствием подписался и поставил лайк. Кстати, я ваш 92-ой подписчик. Удачи и успехов.
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Спасибо)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
В формуле ошибка, пишу правильный вариант: sin(in) = i sh(n), где sh(n) - гиперболический синус
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Pdf: drive.google.com/drive/folders/15fMKIGWm8PXWPKNZqNQ2zireVBnH1miy
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
PDF: конспекта drive.google.com/drive/folders/15fMKIGWm8PXWPKNZqNQ2zireVBnH1miy
@user-do8sb2ol6e
@user-do8sb2ol6e 6 месяцев назад
я 1й
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Красава)
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Значит на 5 сдашь ТФКП
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
PDF версия: drive.google.com/drive/folders/15fMKIGWm8PXWPKNZqNQ2zireVBnH1miy
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
PDF версия: drive.google.com/drive/folders/15fMKIGWm8PXWPKNZqNQ2zireVBnH1miy
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Pdf версия: drive.google.com/drive/folders/15fMKIGWm8PXWPKNZqNQ2zireVBnH1miy
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
00:25 секунда «из-за того что Один из корней характеристического уравнения совпал С КОЭФФИЦИЕНТОМ В АРГУМЕНТЕ ГИПЕРБОЛИЧЕСКОГО СИНУСА, в исходном уравнении», мы и домножаем на икс.. На видео забыл сказать это 😕
@artdevh3735
@artdevh3735 7 месяцев назад
Привет. Можете записать как с excel читать данные и записывать данные через winforms?
@OnTheWayToTheDirection
@OnTheWayToTheDirection 6 месяцев назад
Хорошо)
@artdevh3735
@artdevh3735 6 месяцев назад
​@@OnTheWayToTheDirectionспасибо. Причем нашел в инете как из excel забрать данные. И можно через метод ReadAllLines забрать сразу массив строк. Но появилась проблема какую кодировку не ставил бесполезно, все равно данные как мусор, хотя в excel есть нормальные данные. Преобразовывал через System::Text::Encoding::GetEncoding("Windows-1251"); и пробовал UTF-8 и Default ничего не сработало из этого.
@dimoncredo7759
@dimoncredo7759 7 месяцев назад
работает на 0 процентов ..по крайней мере у меня
@OnTheWayToTheDirection
@OnTheWayToTheDirection 7 месяцев назад
Исправлю ролик скоро, спасибо. А вам советую через vckpkg поставить boost. Гораздо проще
@user-qd6jh7xo1k
@user-qd6jh7xo1k Год назад
Эх, а в плюсах move семантика))
@user-pc1bs1xy2q
@user-pc1bs1xy2q Год назад
Надо было ещё окружность на плоскости XoY нарисовать и показать как функция выглядит без ограничений. А так все супер 👍
@OnTheWayToTheDirection
@OnTheWayToTheDirection Год назад
Спасибо за ваше внимание. Я в некоторых роликах ошибки даже допускал. Только сейчас понимаю, в чем дело.
@Fox_Gan
@Fox_Gan Год назад
Почему видео ускорено?
@OnTheWayToTheDirection
@OnTheWayToTheDirection Год назад
К сожалению замедлить можно только силами youtube.
@richardpinkerton6337
@richardpinkerton6337 Год назад
Мне кажется лучше объединять короткие видосы и делать тайм-коды
@OnTheWayToTheDirection
@OnTheWayToTheDirection 9 месяцев назад
Прислушался к вашему совету. Осталось только научиться делать тайм-коды. Может вы знаете как это делать?)