#!/usr/bin/python
# Uloha ROH1
# Vytvoril Radek Podgorny <radek@podgorny.cz>
# Tohle je fakt prasarna, ale snad to pomuze. Teoreticky funguje pro vsechny uhly...

from math import *

Eps0 = 8.854187817 * 10**-12

points = []
# Tady zadej svoje parametry
points.append((263.145, 134.0, 1));
points.append((493.62, 197.158, -1));
alpha= 1.0472
tau = 0.00265628
Epsr = 27.6
r = 0.00467


# Dopocitat dalsi body
num = int(round(2*pi/alpha));


def mirror():
	r1 = (points[0][0]**2 + points[0][1]**2)**0.5
	r2 = (points[1][0]**2 + points[1][1]**2)**0.5
	ang1 = atan(points[0][1]/points[0][0])
	ang2 = atan(points[1][1]/points[1][0])

	for i in range(2,num+1,2):
		points.append((cos(i*alpha-ang1)*r1, sin(i*alpha-ang1)*r1, -points[0][2]))
		points.append((cos(i*alpha-ang2)*r2, sin(i*alpha-ang2)*r2, -points[1][2]))

		points.append((cos(i*alpha+ang1)*r1, sin(i*alpha+ang1)*r1, points[0][2]))
		points.append((cos(i*alpha+ang2)*r2, sin(i*alpha+ang2)*r2, points[1][2]))

	del points[num*2]
	del points[num*2]

def dist(a, b):
	return ((b[0]-a[0])**2 + (b[1]-a[1])**2)**0.5


def fi(c):
	fic = 0.0
	for i in range(num*2):
		if (dist(points[i], c) > r):
			fic += -(tau*points[i][2])/(2*pi*Eps0*Epsr) * log(dist(points[i], c))
		else:
			fic += -(tau*points[i][2])/(2*pi*Eps0*Epsr) * log(r)
	return fic

def Ey(c):
	Ey = 0.0
	for i in range(num*2):
		if (dist(points[i], c) >= r):
			E = (tau*points[i][2])/(2*pi*Eps0*Epsr*dist(points[i], c))
			p = (c[1]-points[i][1])/dist(c, points[i])
			Ey += E*p
	return Ey


mirror()

c = ((points[0][0]+points[1][0])/2, (points[0][1]+points[1][1])/2)
print("Potencial mezi A a B je " + str(fi(c)))

C = tau/(fi(points[0])-fi(points[1]))
print("Kapacita 1m vedeni AB je " + str(C))

print("Potencial bodu A je " + str(fi(points[0])))

print("Napeti mezi A a B je " + str(fi(points[0])-fi(points[1])))

E = tau/(2*pi*Eps0*Epsr*r)
print("Maximalni intenzita je " + str(E))

F = tau*Ey(points[0])
print("Sile na 1m vodice A ve smeru y je " + str(F))

for i in range(num*2-2):
	del points[2]
points[1] = (points[1][0], points[1][1], 0)
mirror()
C = tau/fi(points[0])
print("Kapacita 1m vedeni A (vzhledem k deskam) je " + str(C))

