// File: /workspace/github_cpp_makefile_star2_O3/iannisdezwart[P]forcefield-visualiser/./motion.hpp
// Function: motion::four_body()
void circular()
	{
		// The fixed mass in the middle

		masses.push_back(Mass(WIDTH / 2, HEIGHT / 2, 1));

		// The moving mass

		Mass moving_mass(300, 0, 1);
		masses.push_back(moving_mass);

		// Set the rotation

		double rotation = 0.01 * 2 * M_PI;

		Matrix<2, 2> rotation_matrix({
			{ cos(rotation), -sin(rotation) },
			{ sin(rotation), cos(rotation) },
		});

		// Render 100 frames

		for (int i = 0; i < 100; i++) {
			string frame_number = to_string(i);

			if (frame_number.length() != 4) {
				frame_number = string(4 - frame_number.length(), '0') + frame_number;
			}

			// Move the moving mass

			moving_mass.position = rotation_matrix * moving_mass.position;

			// Set the moving mass in the image

			masses[1].position = masses[0].position + moving_mass.position;

			render_image("output/" + frame_number + ".png", MULTI_THREADED);

			cout << "Rendered frame " << i << "/" << "100\n";
		}
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movsd 0x28db(%rip), %xmm0     # 0x7050
movaps %xmm0, 0x90(%rsp)
movl $0x4, 0xa0(%rsp)
movq 0x5af9(%rip), %rsi      # 0xa288
cmpq 0x5afa(%rip), %rsi      # 0xa290
je 0x47b9
movq 0xa0(%rsp), %rax
movq %rax, 0x10(%rsi)
movaps 0x90(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x18, 0x5ad1(%rip)     # 0xa288
jmp 0x47cd
leaq 0x5ac0(%rip), %rdi      # 0xa280
leaq 0x90(%rsp), %rdx
callq 0x5510
movaps 0x295c(%rip), %xmm0     # 0x7130
leaq 0x110(%rsp), %rax
movaps %xmm0, (%rax)
leaq 0x138(%rsp), %rsi
movq %rax, (%rsi)
movl $0x2, %eax
movq %rax, 0x8(%rsi)
movaps 0x2946(%rip), %xmm0     # 0x7140
leaq 0xf0(%rsp), %rbx
movaps %xmm0, (%rbx)
movq %rbx, 0x10(%rsi)
movq %rax, 0x18(%rsi)
leaq 0x158(%rsp), %rdi
movl $0x2, %edx
callq 0x5178
movq $0x0, 0x58(%rsp)
movabsq $0x4072c00000000000, %rax # imm = 0x4072C00000000000
movq %rax, 0x60(%rsp)
movl $0x3, 0x68(%rsp)
movq 0x5a42(%rip), %rsi      # 0xa288
cmpq 0x5a43(%rip), %rsi      # 0xa290
je 0x486a
movq 0x68(%rsp), %rax
movq %rax, 0x10(%rsi)
movups 0x58(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x18, 0x5a20(%rip)     # 0xa288
jmp 0x487b
leaq 0x5a0f(%rip), %rdi      # 0xa280
leaq 0x58(%rsp), %rdx
callq 0x5510
movaps 0x28ce(%rip), %xmm0     # 0x7150
movaps %xmm0, 0xf0(%rsp)
leaq 0x110(%rsp), %rsi
movq %rbx, (%rsi)
movl $0x2, %eax
movq %rax, 0x8(%rsi)
movaps 0x28bb(%rip), %xmm0     # 0x7160
leaq 0x20(%rsp), %rbx
movaps %xmm0, (%rbx)
movq %rbx, 0x10(%rsi)
movq %rax, 0x18(%rsi)
leaq 0x138(%rsp), %rdi
movl $0x2, %edx
callq 0x5178
movsd 0x2799(%rip), %xmm0     # 0x7068
movaps %xmm0, 0x70(%rsp)
movl $0x2, 0x80(%rsp)
movq 0x59a2(%rip), %rsi      # 0xa288
cmpq 0x59a3(%rip), %rsi      # 0xa290
je 0x490d
movq 0x80(%rsp), %rax
movq %rax, 0x10(%rsi)
movaps 0x70(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x18, 0x597d(%rip)     # 0xa288
jmp 0x491e
leaq 0x596c(%rip), %rdi      # 0xa280
leaq 0x70(%rsp), %rdx
callq 0x5510
movaps 0x284b(%rip), %xmm0     # 0x7170
movaps %xmm0, 0x20(%rsp)
leaq 0xf0(%rsp), %rsi
movq %rbx, (%rsi)
movl $0x2, %eax
movq %rax, 0x8(%rsi)
movaps 0x283b(%rip), %xmm0     # 0x7180
movq %rsp, %rbx
movaps %xmm0, (%rbx)
movq %rbx, 0x10(%rsi)
movq %rax, 0x18(%rsi)
leaq 0x110(%rsp), %rdi
movl $0x2, %edx
callq 0x5178
movq $0x0, 0x40(%rsp)
movabsq $-0x3f80c00000000000, %rax # imm = 0xC07F400000000000
movq %rax, 0x48(%rsp)
movl $0x1, 0x50(%rsp)
movq 0x58fc(%rip), %rsi      # 0xa288
cmpq 0x58fd(%rip), %rsi      # 0xa290
je 0x49b0
movq 0x50(%rsp), %rax
movq %rax, 0x10(%rsi)
movups 0x40(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x18, 0x58da(%rip)     # 0xa288
jmp 0x49c1
leaq 0x58c9(%rip), %rdi      # 0xa280
leaq 0x40(%rsp), %rdx
callq 0x5510
movaps 0x27c8(%rip), %xmm0     # 0x7190
leaq 0x10(%rsp), %rax
movaps %xmm0, -0x10(%rax)
leaq 0x20(%rsp), %r14
movq %rbx, (%r14)
movl $0x2, %eax
movq %rax, 0x8(%r14)
movaps 0x27b7(%rip), %xmm0     # 0x71a0
leaq 0xb0(%rsp), %rcx
movaps %xmm0, (%rcx)
movq %rcx, 0x10(%r14)
movq %rax, 0x18(%r14)
leaq 0xf0(%rsp), %rdi
movl $0x2, %edx
movq %r14, %rsi
callq 0x5178
leaq 0xe0(%rsp), %r12
xorl %ebp, %ebp
movq 0x55ae(%rip), %r15      # 0x9fd0
movl $0x1, %r13d
cmpl $0xa, %ebp
jb 0x4a48
movl $0x2, %r13d
cmpl $0x64, %ebp
jb 0x4a48
cmpl $0x3e8, %ebp            # imm = 0x3E8
movl $0x4, %r13d
sbbl $0x0, %r13d
movl %r13d, %esi
leaq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
movq %r14, %rdi
movl $0x2d, %edx
callq 0x32e0
movq 0x20(%rsp), %rdi
movl %r13d, %esi
movl %ebp, %edx
callq 0x540c
movq 0x28(%rsp), %rax
cmpq $0x4, %rax
je 0x4b4b
movl $0x4, %esi
subq %rax, %rsi
leaq 0xc0(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0xb0(%rsp), %r13
movq %r13, %rdi
movl $0x30, %edx
callq 0x32e0
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq %r13, %rdi
callq 0x30d0
leaq 0x10(%rsp), %r13
movq %r13, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ae5
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x4aed
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x32f0
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x4b26
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x3280
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x4b4b
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x3280
movsd 0x90(%rsp), %xmm0
movsd 0x98(%rsp), %xmm1
leaq 0x158(%rsp), %rdi
callq 0x51d6
movsd %xmm0, 0x90(%rsp)
movsd %xmm1, 0x98(%rsp)
leaq 0x90(%rsp), %rdi
movsd 0x24cc(%rip), %xmm0     # 0x7058
movsd 0x24cc(%rip), %xmm1     # 0x7060
callq 0x5272
movq 0x56e0(%rip), %rax      # 0xa280
movsd %xmm0, (%rax)
movsd %xmm1, 0x8(%rax)
movsd 0x58(%rsp), %xmm0
movsd 0x60(%rsp), %xmm1
leaq 0x138(%rsp), %rdi
callq 0x51d6
movsd %xmm0, 0x58(%rsp)
movsd %xmm1, 0x60(%rsp)
leaq 0x58(%rsp), %rdi
movsd 0x247d(%rip), %xmm0     # 0x7058
movsd 0x247d(%rip), %xmm1     # 0x7060
callq 0x5272
movq 0x5691(%rip), %rax      # 0xa280
movsd %xmm0, 0x18(%rax)
movsd %xmm1, 0x20(%rax)
movsd 0x70(%rsp), %xmm0
movsd 0x78(%rsp), %xmm1
leaq 0x110(%rsp), %rdi
callq 0x51d6
movsd %xmm0, 0x70(%rsp)
movsd %xmm1, 0x78(%rsp)
leaq 0x70(%rsp), %rdi
movsd 0x242d(%rip), %xmm0     # 0x7058
movsd 0x242d(%rip), %xmm1     # 0x7060
callq 0x5272
movq 0x5641(%rip), %rax      # 0xa280
movsd %xmm0, 0x30(%rax)
movsd %xmm1, 0x38(%rax)
movsd 0x40(%rsp), %xmm0
movsd 0x48(%rsp), %xmm1
leaq 0xf0(%rsp), %rdi
callq 0x51d6
movsd %xmm0, 0x40(%rsp)
movsd %xmm1, 0x48(%rsp)
leaq 0x40(%rsp), %rdi
movsd 0x23dd(%rip), %xmm0     # 0x7058
movsd 0x23dd(%rip), %xmm1     # 0x7060
callq 0x5272
movq 0x55f1(%rip), %rax      # 0xa280
movsd %xmm0, 0x48(%rax)
movsd %xmm1, 0x50(%rax)
movq %rbx, %rdi
leaq 0x251d(%rip), %rsi      # 0x71c0
movq %r14, %rdx
callq 0x52b5
movq %rbx, %rdi
leaq 0x253b(%rip), %rsi      # 0x71f0
callq 0x3480
movq %r12, 0xd0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4ce6
movq %rdx, 0xd0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xe0(%rsp)
jmp 0x4cee
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
movq %rdx, 0xd8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xd0(%rsp), %rdi
movl $0x1, %esi
callq 0x3beb
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x4d38
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x3280
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x4d53
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x3280
movl $0xf, %edx
movq %r15, %rdi
leaq 0x2466(%rip), %rsi      # 0x71c8
callq 0x32d0
movq %r15, %rdi
movl %ebp, %esi
callq 0x3400
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
leaq 0x2443(%rip), %rsi      # 0x71c6
callq 0x32d0
movl $0x5, %edx
movq %r13, %rdi
leaq 0x244b(%rip), %rsi      # 0x71e2
callq 0x32d0
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x4db8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3280
incl %ebp
cmpl $0x640, %ebp            # imm = 0x640
jne 0x4a22
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x4e53
movq 0xc0(%rsp), %rsi
jmp 0x4e46
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
jmp 0x4e50
movq %rax, %rbx
jmp 0x4e33
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x4e33
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x3280
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x4e53
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x3280
jmp 0x4e53
movq %rax, %rbx
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x4e6f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x3280
movq %rbx, %rdi
callq 0x3420