// File: dannycalegari[P]circle_pack/./graphics.cc
// Function: draw_3d_circle(Point, double, bool)
void draw_3d_circle(Point P, double R, bool front){
	double t;
	double theta,r;
	double fraction;
	fraction=0.003/R;	// the bigger the radius, the smaller fraction should be
	Matrix M;
	Point Q;
	int x1,y1,x2,y2;
    theta=sph_ang(P);
    r=acos(P.z);
    M=ROT(theta)*XZ_ROT(-r);
    Q.x=0.0;
    Q.y=0.0;
    Q.z=1.0;
  //  write_Point(M(Q));
	// write_Point(P);
	if(front){
	    for(t=0.0;t<=TWOPI*(1.0+fraction);t=t+TWOPI*fraction){
    		Q.x=sin(R)*cos(t);
    		Q.y=sin(R)*sin(t);
    		Q.z=cos(R);
    		Q=M(Q);
    		x2=x1;
    		y2=y1;
    		x1=(int) (300.0+Q.x*200.0);
    		y1=(int) (300.0+Q.y*200.0);
    		if(t!=0.0 && Q.z>=0.0){
    			draw_line(x1,y1,x2,y2);
    		};
    	};
	} else {
	    for(t=0.0;t<=TWOPI*(1.0+fraction);t=t+TWOPI*fraction){
    		Q.x=sin(R)*cos(t);
    		Q.y=sin(R)*sin(t);
    		Q.z=cos(R);
    		Q=M(Q);
    		x2=x1;
    		y2=y1;
    		x1=(int) (300.0+Q.x*200.0);
    		y1=(int) (300.0+Q.y*200.0);
    		if(t!=0.0 && Q.z<=0.0){
    			draw_line(x1,y1,x2,y2);
    		};
    	};
	};
	

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x190, %rsp            # imm = 0x190
movb %dil, %al
leaq 0x10(%rbp), %rcx
movq %rcx, -0x158(%rbp)
movsd %xmm0, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movsd -0x8(%rbp), %xmm1
movsd 0x8c10(%rip), %xmm0     # 0x11070
divsd %xmm1, %xmm0
movsd %xmm0, -0x30(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xa290
movq -0x158(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x80(%rbp)
movups (%rax), %xmm0
movaps %xmm0, -0x90(%rbp)
movq -0x80(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x90(%rbp), %xmm0
movups %xmm0, (%rax)
callq 0x3860
movq -0x158(%rbp), %rax
movsd %xmm0, -0x20(%rbp)
movsd 0x10(%rax), %xmm0
callq 0x21d0
movsd %xmm0, -0x28(%rbp)
movsd -0x20(%rbp), %xmm0
leaq -0xc0(%rbp), %rdi
callq 0x2980
jmp 0x84d3
movaps 0x8be6(%rip), %xmm1     # 0x110c0
movsd -0x28(%rbp), %xmm0
pxor %xmm1, %xmm0
leaq -0xe8(%rbp), %rdi
callq 0x2ba0
jmp 0x84f1
leaq -0xa8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0xa9f0
jmp 0x850d
leaq -0x48(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0xa690
leaq -0xa8(%rbp), %rdi
callq 0xa410
leaq -0xe8(%rbp), %rdi
callq 0xa410
leaq -0xc0(%rbp), %rdi
callq 0xa410
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd 0x8ab7(%rip), %xmm0     # 0x11010
movsd %xmm0, -0x50(%rbp)
testb $0x1, -0x9(%rbp)
je 0x8776
xorps %xmm0, %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x18(%rbp), %xmm1
movsd 0x8a93(%rip), %xmm2     # 0x11010
addsd -0x30(%rbp), %xmm2
movsd 0x8a9e(%rip), %xmm0     # 0x11028
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x8771
movsd -0x8(%rbp), %xmm0
callq 0x2060
movsd %xmm0, -0x168(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x23f0
movaps %xmm0, %xmm1
movsd -0x168(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x2060
movsd %xmm0, -0x160(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x2060
movaps %xmm0, %xmm1
movsd -0x160(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x23f0
movsd %xmm0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x110(%rbp)
movups -0x60(%rbp), %xmm0
movaps %xmm0, -0x120(%rbp)
movq -0x110(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x120(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x100(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0xa750
jmp 0x8647
movq -0x100(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x50(%rbp)
movl -0x64(%rbp), %eax
movl %eax, -0x6c(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
movsd 0x89f7(%rip), %xmm1     # 0x11078
mulsd %xmm1, %xmm0
movsd 0x89f3(%rip), %xmm1     # 0x11080
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x64(%rbp)
movsd -0x58(%rbp), %xmm0
movsd 0x89d3(%rip), %xmm1     # 0x11078
mulsd %xmm1, %xmm0
movsd 0x89cf(%rip), %xmm1     # 0x11080
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x68(%rbp)
movsd -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x86ce
jp 0x86ce
jmp 0x874b
movsd -0x50(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x874b
movl -0x64(%rbp), %edi
movl -0x68(%rbp), %esi
movl -0x6c(%rbp), %edx
movl -0x70(%rbp), %ecx
callq 0x82d0
jmp 0x86ef
jmp 0x874b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x8935
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x873a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0xa410
leaq -0xc0(%rbp), %rdi
callq 0xa410
jmp 0x8935
jmp 0x874d
movsd -0x18(%rbp), %xmm1
movsd -0x30(%rbp), %xmm0
movsd 0x88c9(%rip), %xmm2     # 0x11028
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
jmp 0x8570
jmp 0x8923
xorps %xmm0, %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x18(%rbp), %xmm1
movsd 0x8885(%rip), %xmm2     # 0x11010
addsd -0x30(%rbp), %xmm2
movsd 0x8890(%rip), %xmm0     # 0x11028
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x8921
movsd -0x8(%rbp), %xmm0
callq 0x2060
movsd %xmm0, -0x178(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x23f0
movaps %xmm0, %xmm1
movsd -0x178(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x2060
movsd %xmm0, -0x170(%rbp)
movsd -0x18(%rbp), %xmm0
callq 0x2060
movaps %xmm0, %xmm1
movsd -0x170(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x23f0
movsd %xmm0, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0x140(%rbp)
movups -0x60(%rbp), %xmm0
movaps %xmm0, -0x150(%rbp)
movq -0x140(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x150(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x138(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0xa750
jmp 0x8855
movq -0x138(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x50(%rbp)
movl -0x64(%rbp), %eax
movl %eax, -0x6c(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x70(%rbp)
movsd -0x60(%rbp), %xmm0
movsd 0x87e9(%rip), %xmm1     # 0x11078
mulsd %xmm1, %xmm0
movsd 0x87e5(%rip), %xmm1     # 0x11080
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x64(%rbp)
movsd -0x58(%rbp), %xmm0
movsd 0x87c5(%rip), %xmm1     # 0x11078
mulsd %xmm1, %xmm0
movsd 0x87c1(%rip), %xmm1     # 0x11080
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movl %eax, -0x68(%rbp)
movsd -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x88dc
jp 0x88dc
jmp 0x88fb
xorps %xmm0, %xmm0
ucomisd -0x50(%rbp), %xmm0
jb 0x88fb
movl -0x64(%rbp), %edi
movl -0x68(%rbp), %esi
movl -0x6c(%rbp), %edx
movl -0x70(%rbp), %ecx
callq 0x82d0
jmp 0x88f9
jmp 0x88fb
jmp 0x88fd
movsd -0x18(%rbp), %xmm1
movsd -0x30(%rbp), %xmm0
movsd 0x8719(%rip), %xmm2     # 0x11028
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
jmp 0x877e
jmp 0x8923
leaq -0x48(%rbp), %rdi
callq 0xa410
addq $0x190, %rsp            # imm = 0x190
popq %rbp
retq
leaq -0x48(%rbp), %rdi
callq 0xa410
movq -0xc8(%rbp), %rdi
callq 0x23c0
nopw (%rax,%rax)