ins = open('GarrisonMiner_A_mine_level_2_ONLY.xml', 'r' )
ous = open("GarrisonMiner_H_mine_2_ONLY.xml", "w" )
import math
# Mine 1
Ally1_X, Ally1_Y, Ally1_Z = 1886.043, 83.0498, 84.29963
Horde1_X, Horde1_Y, Horde1_Z = 5466.456, 4430.831, 145.7061
xshift, yshift, zshift = Horde1_X - Ally1_X, Horde1_Y - Ally1_Y, Horde1_Z - Ally1_Z
print( "Shift: ", xshift, yshift, zshift )
# Mine Bulyzhnik
AllyB_X, AllyB_Y, AllyB_Z = 1851.025, 162.6187, 17.93922
HordeB_X, HordeB_Y, HordeB_Z = 5397.303, 4483.142, 78.94901
AllyVec_X, AllyVec_Y, AllyVec_Z = AllyB_X-Ally1_X, AllyB_Y-Ally1_Y, AllyB_Z-Ally1_Z
AllyVec_Len = math.sqrt( AllyVec_X**2 + AllyVec_Y**2 )
print( "Ally Vec: ", AllyVec_X, AllyVec_Y, AllyVec_Z, ", Len: ", AllyVec_Len )
HordeVec_X, HordeVec_Y, HordeVec_Z = HordeB_X-Horde1_X, HordeB_Y-Horde1_Y, HordeB_Z-Horde1_Z
HordeVec_Len = math.sqrt( HordeVec_X**2 + HordeVec_Y**2 )
print( "Horde Vec: ", HordeVec_X, HordeVec_Y, HordeVec_Z, ", Len: ", HordeVec_Len )
Cos_Turn = (AllyVec_X*HordeVec_X + AllyVec_Y*HordeVec_Y) / (math.sqrt(AllyVec_X**2 + HordeVec_X**2) * math.sqrt(AllyVec_Y**2 + HordeVec_Y**2))
Angle_Turn = math.acos( Cos_Turn )
Sin_Turn = - math.sin(Angle_Turn)
print( "Cos: ", Cos_Turn, ", Angle: ", Angle_Turn, "Sin: ", Sin_Turn )
for line in ins:
if( 'X="' in line and 'Y="' in line and 'Z="' in line ):
# extract X, Y, Z
a = line
xbeg, xsep, xrest = a.partition('X="')
xstr, xqsep, xrest2 = xrest.partition('"')
aX = float(xstr)
ybeg, ysep, yrest = xrest2.partition('Y="')
ystr, yqsep, yrest2 = yrest.partition('"')
aY = float(ystr)
zbeg, zsep, zrest = yrest2.partition('Z="')
zstr, zqsep, zrest2 = zrest.partition('"')
aZ = float(zstr)
# Modify X, Y, Z - this calls for a procedure, but I am a newb in Python too
#
# Having Cos and Sin, H coords are calculated as follows:
#
# hZ = aZ + zshift
#
# subtract Ally1 from aX, aY
# hX = aX * Cos - aY * Sin
# hY = aX * Sin + aY * Cos
#
# or (if a turn is in a different direction actually):
#
# hX = aX * Cos + aY * Sin
# hY = -aX * Sin + aY * Cos
#
# Now, add Ally1 back, add xshift and yshift and you are done
hZ = aZ + zshift
aX, aY = aX - Ally1_X, aY - Ally1_Y
hX = aX*Cos_Turn + aY*Sin_Turn
hY = -aX*Sin_Turn + aY*Cos_Turn
hX = hX + Ally1_X + xshift
hY = hY + Ally1_Y + yshift
res = xbeg + xsep + str(hX) + xqsep + ybeg + ysep + str(hY) + yqsep + zbeg + zsep + str(hZ) + zqsep + zrest2
print( res, file=ous, end = "" )
else:
print( line, file=ous, end = "" )
ins.close()
ous.close()