mirror of
https://gitlab.rlp.net/mobitar/ReCo.jl.git
synced 2025-09-04 09:12:35 +00:00
Center of mass graphics
This commit is contained in:
parent
cba608a425
commit
d7ad9c3354
10 changed files with 178 additions and 27 deletions
129
graphics/center_of_mass.jl
Normal file
129
graphics/center_of_mass.jl
Normal file
|
@ -0,0 +1,129 @@
|
|||
using Luxor
|
||||
using StaticArrays
|
||||
|
||||
using ReCo: restrict_coordinate
|
||||
|
||||
##
|
||||
|
||||
function project(x, L)
|
||||
φ = (x + L) * π / L
|
||||
return Point(cos(φ), -sin(φ))
|
||||
end
|
||||
|
||||
function project_back(θ, L)
|
||||
return θ * L / π - L
|
||||
end
|
||||
|
||||
##
|
||||
|
||||
box_length = 100
|
||||
box_height = 100
|
||||
|
||||
L = 0.35 * box_length
|
||||
|
||||
R = 0.35 * box_length
|
||||
|
||||
A = -0.9 * L
|
||||
B = 0.65 * L
|
||||
pr = 0.03 * L
|
||||
|
||||
Ap = project(A, L)
|
||||
Bp = project(B, L)
|
||||
|
||||
M = R * ((Ap + Bp) / 2)
|
||||
|
||||
θ = atan(-M[2], M[1])
|
||||
|
||||
COM = restrict_coordinate(project_back(θ, L); l=L)
|
||||
COMp = R * Point(cos(θ), -sin(θ))
|
||||
|
||||
##
|
||||
|
||||
graphics_export_dir = "exports/graphics"
|
||||
mkpath(graphics_export_dir)
|
||||
|
||||
Drawing(box_length, box_height, "$graphics_export_dir/line.pdf")
|
||||
origin()
|
||||
|
||||
setcolor("black")
|
||||
arrow(Point(-1.1 * L, 0), Point(1.2 * L, 0); arrowheadlength=0.1 * L, linewidth=0.8)
|
||||
|
||||
green_orange = blend(Point(-1.5 * L, 0), Point(1.5 * L, 0))
|
||||
addstop(green_orange, 0.0, "orange")
|
||||
addstop(green_orange, (L) / (3 * L), "green")
|
||||
addstop(green_orange, (2 * L) / (3 * L), "orange")
|
||||
addstop(green_orange, 1.0, "green")
|
||||
setblend(green_orange)
|
||||
setline(0.8)
|
||||
line(Point(-L, 0), Point(L, 0), :stroke)
|
||||
|
||||
setcolor("red")
|
||||
setline(0.5)
|
||||
for x in SVector(-L, L)
|
||||
line(Point(x, 0.05 * L), Point(x, -0.05 * L), :stroke)
|
||||
end
|
||||
|
||||
setcolor("cyan3")
|
||||
line(Point(0, 0.05 * L), Point(0, -0.05 * L), :stroke)
|
||||
|
||||
setcolor("blue")
|
||||
for p in SVector(A, B)
|
||||
circle(Point(p, 0), pr, :fill)
|
||||
end
|
||||
|
||||
setcolor("brown")
|
||||
circle(Point(COM, 0), pr, :fill)
|
||||
|
||||
setcolor("black")
|
||||
fontsize(5)
|
||||
text("x", Point(1.2 * L, 0.035 * L))
|
||||
text("-L", Point(-L - 0.08 * L, 0.18 * L))
|
||||
text("0", Point(0 - 0.035 * L, 0.18 * L))
|
||||
text("+L", Point(L - 0.08 * L, 0.18 * L))
|
||||
text("A", Point(A - 0.04 * L, -0.06 * L))
|
||||
text("B", Point(B - 0.04 * L, -0.06 * L))
|
||||
text("COM", Point(COM - 0.125 * L, -0.06 * L))
|
||||
|
||||
finish()
|
||||
|
||||
##
|
||||
|
||||
Drawing(box_length, box_height, "$graphics_export_dir/circle.pdf")
|
||||
origin()
|
||||
|
||||
arrow(Point(-1.2 * R, 0), Point(1.2 * R, 0); arrowheadlength=0.1 * R, linewidth=0.8)
|
||||
arrow(Point(0, 1.2 * R), Point(0, -1.2 * R); arrowheadlength=0.1 * R, linewidth=0.8)
|
||||
|
||||
setcolor("black")
|
||||
fontsize(5)
|
||||
text("α", Point(1.22 * R, 0.035 * R))
|
||||
text("β", Point(-0.04 * R, -1.23 * R))
|
||||
|
||||
orange_green = blend(Point(0, -R), Point(0, R), "green", "orange")
|
||||
setblend(orange_green)
|
||||
setline(0.8)
|
||||
circle(Point(0, 0), R, :stroke)
|
||||
|
||||
setcolor("red")
|
||||
setline(0.5)
|
||||
line(Point(1.05 * R, 0), Point(0.95 * R, 0), :stroke)
|
||||
setcolor("cyan3")
|
||||
line(Point(-1.05 * R, 0), Point(-0.95 * R, 0), :stroke)
|
||||
|
||||
setcolor("blue")
|
||||
for pp in SVector(Ap, Bp)
|
||||
circle(R * pp, pr, :fill)
|
||||
end
|
||||
|
||||
setcolor("black")
|
||||
setdash("dot")
|
||||
line(R * Ap, R * Bp, :stroke)
|
||||
line(Point(0, 0), COMp, :stroke)
|
||||
|
||||
setcolor("purple1")
|
||||
circle(M, pr, :fill)
|
||||
|
||||
setcolor("brown")
|
||||
circle(COMp, pr, :fill)
|
||||
|
||||
finish()
|
Loading…
Add table
Add a link
Reference in a new issue