import cmath
import math
def dmstodeg(dms):
try:
p = dms.find('°')
if p < 0:
return str(dms)
d = int(dms[0:p].strip())
p1 = dms.find('′')
if p1 < 0:
p1 = dms.find("'")
f = 0
if p1 > 0:
f = int(dms[p + 1:p1].strip())
else:
p1 = p
p2 = dms.find('″')
if p2 < 0:
p2 = dms.find('"')
s = 0
if p2 > 0:
s = float(dms[p1 + 1:p2].strip())
else:
s = dms[p1 + 1:].strip()
return d + f / 60 + s / 3600
except ValueError:
return None
def degtodms(deg):
try:
degrees = int(deg)
minutes = int(math.modf(deg)[0] * 60)
seconds = round(math.modf(math.modf(deg)[0] * 60)[0] * 60, 2)
if deg < 0:
dms = str(degrees) + '°' + str(-minutes) + "\'" + str(-seconds) + '"'
else:
dms = str(degrees) + '°' + str(minutes) + "\'" + str(seconds) + '"'
return dms
except ValueError:
return print(ValueError)
def get_dist_deg(ax, ay, bx, by):
a = complex(ax, ay)
b = complex(bx, by)
linear, azimuth = cmath.polar(b - a)
if azimuth < 0:
return linear, math.degrees(azimuth) + 360
else:
return linear, math.degrees(azimuth)
def transformParameter(parameter):
ax, ay, bx, by, cx, cy, dx, dy = parameter[0], parameter[1], parameter[2], parameter[3], parameter[4], parameter[5], \
parameter[6], parameter[7]
a = complex(ax, ay)
b = complex(bx, by)
c = complex(cx, cy)
d = complex(dx, dy)
f = (c - d) / (a - b)
e = c - f * a
print(e)
print(f.real, degtodms(math.degrees(f.imag)))
return e, f
def coordinateTransform(e, f, coordinate):
g = e + f * complex(coordinate[0], coordinate[1])
return round(g.real, 3), round(g.imag, 3)
def architectureCoordinateTransform(angle, base_point, coordinate, k=1, direction=0):
a = complex(base_point[0], base_point[1])
c = complex(coordinate[0], coordinate[1])
d = complex(k, math.radians(angle))
if direction == 0:
g = a + d * c
else:
g = (c - a) / d
return round(g.real, 3), round(g.imag, 3)
if __name__ == '__main__':
print('a')