https://discord.com/channels/581738731934056449/1096718885606150154/1096718885606150154
Last active
May 24, 2024 08:10
-
-
Save uwezi/c4023d892b13b5873caf6d7fc282507f to your computer and use it in GitHub Desktop.
[arc in 3D] placing an arc/angle between lines in 3D. #manim #3D #angle #arc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from manim import * | |
# https://discord.com/channels/581738731934056449/1096718885606150154/1096718885606150154 | |
class arc3d(VMobject): | |
def __init__(self, A=None, B=None, center=None, radius=1, segments=40, **kwargs): | |
super().__init__(**kwargs) | |
start = center + (A-center)*radius/np.linalg.norm(A-center) | |
end = center + (B-center)*radius/np.linalg.norm(B-center) | |
self.set_points([start]) | |
for i in np.linspace(0,1,segments,endpoint=True): | |
dotonline = start + i*(end-start) | |
radline = dotonline-center | |
dotonarc = center + radline/np.linalg.norm(radline)*radius | |
self.add_smooth_curve_to(dotonarc) | |
class threeDarcTestCube(ThreeDScene): | |
def construct(self): | |
cs = ThreeDAxes() | |
self.add(cs) | |
corners = np.array([[0,0,0],[1,0,0],[1,1,0],[0,1,0],[0,0,1],[1,0,1],[1,1,1],[0,1,1]])*3-np.array([1,1,1]) | |
cube = VGroup( | |
*[Line(corners[i],corners[(i+1)%4]) for i in range(4)], | |
*[Line(corners[4+i],corners[4+(i+1)%4]) for i in range(4)], | |
*[Line(corners[i],corners[i+4]) for i in range(4)], | |
*[Dot3D(corners[i]) for i in range(8)] | |
) | |
self.move_camera(phi=75 * DEGREES, theta=25 * DEGREES) | |
self.play(Create(cube)) | |
line1 = Line(corners[1],corners[7]).set_color(RED) | |
line2 = Line(corners[3],corners[5]).set_color(BLUE) | |
self.play(Create(line1),Create(line2)) | |
self.wait() | |
arc1 = arc3d(A=corners[1],B=corners[3],center=cube.get_center(),radius=1,segments=30).set_color(YELLOW) | |
arc2 = arc3d(A=corners[1],B=corners[5],center=cube.get_center(),radius=1.3,segments=30).set_color(TEAL) | |
self.play(Create(arc1)) | |
self.play(Create(arc2)) | |
self.wait() | |
arc3 = arc3d(A=corners[1],B=corners[3],center=corners[5],radius=1,segments=30).set_color(ORANGE) | |
arc4 = arc3d(A=corners[7],B=corners[3],center=corners[1],radius=0.7,segments=30).set_color(GREEN) | |
line4 = DashedLine(corners[1],corners[3]) | |
self.play(Create(arc3)) | |
self.play(Create(arc4)) | |
self.play(Create(line4)) | |
self.wait() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment