I used shift of origin and tried to solve problem
My Similar question on StackOverflow
and now that ellipse after shift of origin has equation (x/a)^2+(y/b)^2=1
so after condition of tangency to ellipse (am)^2+b^2=c^2
where c = y0-mx0
solved for m
where D = (x0, y0)
is variable point in only +quadrant as ellipse is symmetrical about axes number of lattice points for which the angle between tangents is greater than given angle will be multiplied by 2 if point D is on either axes else with 4
But now I'm unable to find the expected angle α which to this contrast program may result in (180-α) or (90-α) or whatever but is not giving α always
Input
64817 64819 11420
3
30 1
Output
1.5 1.118033988749895 #values of a, b of ellipse
88.09084756700362 #Given angle
0 2 84.26082952273322 # x, y, and angle
0 3 56.63298703076825
0 4 42.667925494108374
0 5 34.21605113129826
0 6 28.552637360182302
1 1 132.1304147613666
1 2 105.37675990405205
1 3 126.93618989341962
1 4 138.99680040248643
1 5 146.68139315999935
1 6 151.98229919837212
2 0 99.59406822686043
2 1 70.40251628700852
2 2 123.92838964927597 #In figure it is 56.0716 while it's supplementary angle
2 3 135.0795775738836
2 4 143.16521634758482
2 5 149.05461064130475
2 6 153.44570404972666
3 0 133.43253655778977
3 1 45.1685179704227
3 2 138.68062832170193
3 3 143.5441803020086
3 4 148.1966760890815
3 5 152.19282398152126
3 6 155.49812437089727
4 0 146.4426902380793
4 1 33.150772763942314
4 2 148.18918752912822
4 3 150.3525987174534
4 4 152.8971875924072
4 5 155.43753093848753
4 6 157.77424382459193
5 0 153.61567025059207
5 1 26.21616761276448
5 2 154.36403775389698
5 3 155.4135197186744
5 4 156.82314264518547
5 5 158.40584822123196
5 6 160.005114518988
6 0 158.21321070173815
6 1 21.70150969841879
6 2 158.59334015511746
6 3 159.1528282819498
6 4 159.9664352057684
6 5 160.96054819665326
6 6 162.04466838669927
Code
from math import atan
from math import acos
from math import degrees
from math import atan2
from math import sqrt
from operator import gt
from operator import abs
class P_test():
def __init__(self,x,y,a,b):
self.x, self.y, self.a, self.b = x, y, a, b
def Region(self): # Tests if point(x,y) is out of region of ellipse
if (self.x/self.a)**2 + (self.y/self.b)**2 >1:
return 1
def T_angle(self): # Returns angle between tangents but not expected None
x, y = self.x, self.y
A, B , C = self.a**2-self.x**2, 2*self.x*self.y, self.b**2-self.y**2
D = sqrt(B**2-4*A*C)
m1, m2 = (-B+D)/(2*A), (-B-D)/(2*A)
alpha1 = degrees(acos(1/(sqrt(1+m1**2))))
alpha2 = degrees(acos(1/(sqrt(1+m2**2))))
if x*y: return 180-degrees(abs(atan2(y,y/m1)-atan2(y,y/m2)))
return 180-abs(alpha2)-abs(alpha1)
class Datasource():
def __init__(self, cordinate, radius, pq):
self.xy, self.r, self.pq = cordinate, radius, pq
def a_b_of_ellipse(self):
x1, x2, y, r = self.xy[0], self.xy[1], self.xy[2], self.r
H, K = x1 + (x2-x1)/2, y
mx, my = x1-H, y-K
gx, gy = x2-H, y-K
ae = (mx-gx)/2
a =gx + (r-(x2-x1))/2
b = sqrt(a**2-ae**2)
return a, b
def G_angle(self):
return degrees(atan(self.pq[0]/self.pq[1]))
xy_cord = list(map(int, input().split()))
radius = int(input())
pq = list(map(int, input().split()))
r1 = Datasource(xy_cord, radius, pq)
aa, bb, G = r1.a_b_of_ellipse()[0], r1.a_b_of_ellipse()[1], r1.G_angle()
print(aa, bb); print(G)
for x in range(0,7):
for y in range(0,7):
r2 = P_test(x,y,aa,bb)
if r2.Region():
print(x,y,r2.T_angle())
How can I find Only Alpha Angle