# -*- coding: utf-8 -*-
from turtle import *
import math
# pixel は0.3mm.　mmとナノクーロンを基本にするとkは9e-3
# 方向を決めるだけなので絶対値は気にしない、kを省略、電荷は100ナノクーロン
# pixel は1mm程度と思って設定を眺めてみる
# 角度が小さいと戻ってこない
# 電気映像法の問題、距離d離れた球体半径aの電位を一定にする鏡像電荷とその位置
# 原点は右側の球面にある
t1 = Turtle()
t1.color('yellow')
t2 = Turtle()
d=300.
a=100.
q=100
qd=-q*a/d
#qd= -q
x1=d-a
x2=-a+a*a/d
def direction(x,y):
    r1=math.sqrt((float(x)-x1)**2+float(y)**2)
    r2=math.sqrt((float(x)-x2)**2+float(y)**2)
    Ex=q*(x-x1)/r1**3+qd*(x-x2)/r2**3
    Ey=q*y/r1**3+qd*y/r2**3
    angle = math.atan2(Ey, Ex)*180/math.pi
    #print( float(x)-x1, y, Ex, Ey, angle)
    return angle

t2.goto(0,0)
for j in range(90):
    angle = (j+1)*2.0
    x=a*math.cos(angle*math.pi/180.)-a
    y=a*math.sin(angle*math.pi/180.)
    t2.goto(x,y)
t1.penup()
t1.forward(300)
for i in range(10):
    start_angle=60+i*10.
    x=int(10.*math.cos(start_angle*math.pi/180.)+x1)
    y=int(10.*math.sin(start_angle*math.pi/180.))
    print("x1, x,y=",x1,10.*math.cos(start_angle*math.pi/180.),10.*math.sin(start_angle*math.pi/180.))
    t1.goto(x,y)
    t1.pendown()
    diff = math.sqrt((x-x2)**2+y**2)
    while (diff > 10.):
        angle = direction(x,y)
        t1.setheading(angle)
        if x > 3000 and y > 3000:
            t1.penup()
        else:
            t1.pendown()
        t1.forward(10)
        x = 10.*math.cos(angle*math.pi/180.) +x
        y = 10.*math.sin(angle*math.pi/180.) +y
        diff = math.sqrt((x-x2)**2+y**2)
        # print (x, y, angle)
        if x > 3000:
            t1.penup()
            break
        if y > 3000:
            t1.penup()
            break
done()
