Kuvankaappausketju
-
- Posts: 63
- Joined: 02 Jan 2016, 11:55
- Location: Helsinki
- Contact:
Re: Kuvankaappausketju
Viikkopelit 4.5.2016
- Cpl Honkonen
- Posts: 657
- Joined: 01 Aug 2015, 14:39
- Location: Iisalmi
Re: Kuvankaappausketju
Meitsi tehny tän päivän itelle excel mortar kalkulaattotria. Vähän kun osais vielä viimeistellä niin toi olis priima.
Laskee metrin tarkoilla koordinaateilla koordinaattierot, etäisyys, korkeusero, kaikille kolmelle panokselle arvot ja spläs ajat 25m hajautuksen ja east/west suunnat.
Last edited by Cpl Honkonen on 06 May 2016, 12:42, edited 1 time in total.
Combat Camera
Jos meitsi sanoo jotain siitä ei saa selvää ja jos siitä sais selvää kannattaa olla vähän pelisilmää sen selvän suhteen
Jos meitsi sanoo jotain siitä ei saa selvää ja jos siitä sais selvää kannattaa olla vähän pelisilmää sen selvän suhteen
Re: Kuvankaappausketju
Tossa oma versio Artillery Calculatorista. Huono kuva
Syötetään tuliaseman koordinaatit ja korko, valitaan haluttu etäisyys- ja sivuhajonta sekä valitaan haluttu "ase".
Syötetään maalipisteiden koordinaatit ja korko. Excel laskee jokaiselle panokselle arvot, sikäli mikäli kyseistä panosta on mahdollista käyttää. Arvoina saadaan suunta, haluttu sivuhajonnan määrä, korot + lentoaika ja etäisyyshajonnan määrä / panos.
Jos jostain syystä iskemät menee pieleen, voidaan laskenta-arvoja korjata N/S ja E/W metrimääräisellä korjauksella.
Ei saanut hirveästi kannatusta tykistökouluttajiltamme, joten jätin kehityksen sikseen.. Eikä toisaalta ole kovin näppärä käyttää ainakaan samalla koneella jolla pelaa..
Re: Kuvankaappausketju
Ei nuo sinun kuvat honkkonen näy.
"Dataa on saatava." -DataNummi
"Toteutus on pilalla, pelkkää paskaa tilalla." -MyösNummi
"Toteutus on pilalla, pelkkää paskaa tilalla." -MyösNummi
- Cpl Honkonen
- Posts: 657
- Joined: 01 Aug 2015, 14:39
- Location: Iisalmi
Re: Kuvankaappausketju
Mulla onnistuu kans mk6, d30 ja m119. Eikä tuon käyttö niin paha ole kun sen ikkunan asemoi oikein gpssää tai karttaa vasten.
Ilmeisesti se näkyy välillä ja välillä ei ja kaikkea muuta.Bummeri wrote:Ei nuo sinun kuvat honkkonen näy.
Combat Camera
Jos meitsi sanoo jotain siitä ei saa selvää ja jos siitä sais selvää kannattaa olla vähän pelisilmää sen selvän suhteen
Jos meitsi sanoo jotain siitä ei saa selvää ja jos siitä sais selvää kannattaa olla vähän pelisilmää sen selvän suhteen
Re: Kuvankaappausketju
Kohta Jesteri kostaa
Re: Kuvankaappausketju
Cpl Honkonen wrote:
Meitsi tehny tän päivän itelle excel mortar kalkulaattotria. Vähän kun osais vielä viimeistellä niin toi olis priima.
Laskee metrin tarkoilla koordinaateilla koordinaattierot, etäisyys, korkeusero, kaikille kolmelle panokselle arvot ja spläs ajat 25m hajautuksen ja east/west suunnat.
Code: Select all
'''
Created on 22.8.2015
@author: Arska
'''
import math
import sys
import tkinter
class mortarApp(tkinter.Tk):
def __init__(self, parent):
tkinter.Tk.__init__(self, parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.ownPos = tkinter.StringVar()
self.ownHeight = tkinter.StringVar()
self.targetPos = tkinter.StringVar()
self.targetHeight = tkinter.StringVar()
self.korjaus_dir = tkinter.StringVar()
self.korjaus_dir.set("None") #DEFAULT
self.korjaus_dist = tkinter.StringVar()
self.korjaus_dist.set("0") #DEFAULT
self.type = tkinter.StringVar()
self.type.set("KOHDISTUS") #DEFAULT
self.type_dir = tkinter.StringVar()
self.type_dir.set("N") #DEFAULT
self.peite_dist = tkinter.StringVar()
self.peite_dist.set("300")
self.ownPoslabel = tkinter.Label(self, text="Own position grid")
self.ownPoslabel.grid(column=0, row=0, sticky='NSWE')
self.ownPosEntry = tkinter.Entry(self, textvariable=self.ownPos)
self.ownPosEntry.grid(column=1, row=0, sticky='NSWE')
self.ownPosheightlabel = tkinter.Label(self, text="Own position ASL")
self.ownPosheightlabel.grid(column=2, row=0, sticky='NSWE')
self.ownHeightEntry = tkinter.Entry(self, textvariable=self.ownHeight)
self.ownHeightEntry.grid(column=3, row=0, sticky='NSWE')
self.targetPoslabel = tkinter.Label(self, text="Target position grid")
self.targetPoslabel.grid(column=0, row=1, sticky='NSWE')
self.targetPosEntry = tkinter.Entry(self, textvariable=self.targetPos)
self.targetPosEntry.grid(column=1, row=1, sticky='NSWE')
self.targetPosheightlabel = tkinter.Label(self, text="Target position ASL")
self.targetPosheightlabel.grid(column=2, row=1, sticky='NSWE')
self.targetHeightEntry = tkinter.Entry(self, textvariable=self.targetHeight)
self.targetHeightEntry.grid(column=3, row=1, sticky='NSWE')
#KORJAUS ISKUIHIN
self.korjauslabel = tkinter.Label(self, text="Korjaus")
self.korjauslabel.grid(column=0, row=2, sticky='NSWE')
self.korjausMenu = tkinter.OptionMenu(self, self.korjaus_dir, "None","N","NE","E","SE","S","SW","W","NW")
self.korjausMenu.grid(column=1, row=2)
self.korjausEntry = tkinter.Entry(self, textvariable=self.korjaus_dist)
self.korjausEntry.grid(column=2, row=2, sticky='NSWE')
#Type of attack
self.typeLabel = tkinter.Label(self, text="Tulikomento")
self.typeLabel.grid(column=0, row=3)
self.typeMenu = tkinter.OptionMenu(self, self.type, "ISKU","PEITE","KOHDISTUS")
self.typeMenu.grid(column=1, row=3)
self.typeDirMenu = tkinter.OptionMenu(self, self.type_dir, "N","NE","E","SE","S","SW","W","NW")
self.typeDirMenu.grid(column=2, row=3)
self.typeEntry = tkinter.Entry(self, textvariable=self.peite_dist)
self.typeEntry.grid(column=3, row=3, sticky='NSWE')
self.calculate = tkinter.Button(self, text= "Calculate!", command=self.doTheMath)
self.calculate.grid(column=0,columnspan=4, row=4, sticky='NSWE')
self.quitButton = tkinter.Button(self, text="QUIT", command=sys.exit)
self.quitButton.grid(column=3, row=10, sticky='NSWE')
self.labelDir = tkinter.StringVar()
self.labelVert0 = tkinter.StringVar()
self.labelVert1 = tkinter.StringVar()
self.labelVert2 = tkinter.StringVar()
self.labelDist = tkinter.StringVar()
self.labelTime0 = tkinter.StringVar()
self.labelTime1 = tkinter.StringVar()
self.labelTime2 = tkinter.StringVar()
self.Dirlabel = tkinter.Label(self, text="Direction:")
self.Dirlabel.grid(column=0, row=5, sticky='NSWE')
self.DirlabelVal = tkinter.Label(self, textvariable=self.labelDir)
self.DirlabelVal.grid(column=1, row=5, sticky='NSWE')
self.Distlabel = tkinter.Label(self, text="Distance:")
self.Distlabel.grid(column=0, row=6, sticky='NSWE')
self.DistlabelVal = tkinter.Label(self, textvariable=self.labelDist)
self.DistlabelVal.grid(column=1, row=6, sticky='NSWE')
self.chargelabel = tkinter.Label(self, text="Charge:")
self.chargelabel.grid(column=0, row=7, sticky='NSWE')
self.charge0label = tkinter.Label(self, text="0")
self.charge0label.grid(column=1, row=7, sticky='NSWE')
self.charge1labe2 = tkinter.Label(self, text="1")
self.charge1labe2.grid(column=2, row=7, sticky='NSWE')
self.charge2label = tkinter.Label(self, text="2")
self.charge2label.grid(column=3, row=7, sticky='NSWE')
self.chargeElevlabel = tkinter.Label(self, text="Elevation:")
self.chargeElevlabel.grid(column=0, row=8, sticky='NSWE')
self.charge0elev = tkinter.Label(self, textvariable=self.labelVert0)
self.charge0elev.grid(column=1, row=8, sticky='NSWE')
self.charge1elev = tkinter.Label(self, textvariable=self.labelVert1)
self.charge1elev.grid(column=2, row=8, sticky='NSWE')
self.charge2elev = tkinter.Label(self, textvariable=self.labelVert2)
self.charge2elev.grid(column=3, row=8, sticky='NSWE')
self.chargeElevlabel = tkinter.Label(self, text="Flight time:")
self.chargeElevlabel.grid(column=0, row=9, sticky='NSWE')
self.charge0elev = tkinter.Label(self, textvariable=self.labelTime0)
self.charge0elev.grid(column=1, row=9, sticky='NSWE')
self.charge1elev = tkinter.Label(self, textvariable=self.labelTime1)
self.charge1elev.grid(column=2, row=9, sticky='NSWE')
self.charge2elev = tkinter.Label(self, textvariable=self.labelTime2)
self.charge2elev.grid(column=3, row=9, sticky='NSWE')
self.resizable(False,False)
self.ownPosEntry.focus()
self.ownHeightEntry.focus()
self.targetPosEntry.focus()
self.targetHeightEntry.focus()
self.korjausEntry.focus()
self.bind('<Return>', self.calculate)
#DEBUG
#self.ownPos.set("00000010")
#self.ownHeight.set("0")
#self.targetPos.set("00000020")
#self.targetHeight.set("0")
def doTheMath(self):
mort_x, mort_y, target_x, target_y = parse_grid(self.ownPos.get(), self.targetPos.get())
if (self.korjaus_dir.get() != "None" and (self.korjaus_dist.get() != "0" or self.korjaus_dist.get() != "")):
if (self.korjaus_dir.get() == "N"):
target_y += int(self.korjaus_dist.get())/10
if (self.korjaus_dir.get() == "NE"):
target_x += int(self.korjaus_dist.get())/10*math.sqrt(2)
target_y += int(self.korjaus_dist.get())/10*math.sqrt(2)
if (self.korjaus_dir.get() == "E"):
target_x += int(self.korjaus_dist.get())/10
if (self.korjaus_dir.get() == "SE"):
target_x += int(self.korjaus_dist.get())/10*math.sqrt(2)
target_y -= int(self.korjaus_dist.get())/10*math.sqrt(2)
if (self.korjaus_dir.get() == "S"):
target_y -= int(self.korjaus_dist.get())/10
if (self.korjaus_dir.get() == "SW"):
target_x -= int(self.korjaus_dist.get())/10*math.sqrt(2)
target_y -= int(self.korjaus_dist.get())/10*math.sqrt(2)
if (self.korjaus_dir.get() == "W"):
target_x -= int(self.korjaus_dist.get())/10
if (self.korjaus_dir.get() == "NW"):
target_x -= int(self.korjaus_dist.get())/10*math.sqrt(2)
target_y += int(self.korjaus_dist.get())/10*math.sqrt(2)
dist,angle = calc_dist_angle(mort_x, mort_y, target_x, target_y)
h_diff = int(self.targetHeight.get()) - int(self.ownHeight.get())
vert_0 = calc_vert_angle(dist, h_diff, VC)
vert_1 = calc_vert_angle(dist, h_diff, VM)
vert_2 = calc_vert_angle(dist, h_diff, VF)
if (vert_0 == '****'):
T_0 = '****'
else:
T_0 = calc_flight_time(VC, dist, vert_0)
if (vert_1 == '****'):
T_1 = '****'
else:
T_1 = calc_flight_time(VM, dist, vert_1)
if (vert_2 == '****'):
T_2 = '****'
else:
T_2 = calc_flight_time(VF, dist, vert_2)
self.labelTime0.set(T_0)
self.labelTime1.set(T_1)
self.labelTime2.set(T_2)
if(self.type.get() == "ISKU"):
distNW,angleNW = calc_dist_angle(mort_x, mort_y, target_x-5, target_y+5)
distSE,angleSE = calc_dist_angle(mort_x, mort_y, target_x+5, target_y-5)
self.labelDir.set("{:04.0f} - {:04.0f}".format(angleNW, angleSE))
self.labelVert0.set("{} - {}".format(calc_vert_angle(distNW, h_diff, VC), calc_vert_angle(distSE, h_diff, VC)))
self.labelVert1.set("{} - {}".format(calc_vert_angle(distNW, h_diff, VM), calc_vert_angle(distSE, h_diff, VM)))
self.labelVert2.set("{} - {}".format(calc_vert_angle(distNW, h_diff, VF), calc_vert_angle(distSE, h_diff, VF)))
elif(self.type.get() == "PEITE" and self.type_dir.get() != ""):
R_mort_x = mort_x
R_mort_y = mort_y
R_target_x = target_x
R_target_y = target_y
if (self.type_dir.get() == "N"):
R_target_y += int(self.peite_dist.get())/10
if (self.type_dir.get() == "NE"):
R_target_x += int(self.peite_dist.get())/10*math.sqrt(2)
R_target_y += int(self.peite_dist.get())/10*math.sqrt(2)
if (self.type_dir.get() == "E"):
R_target_x += int(self.peite_dist.get())/10
if (self.type_dir.get() == "SE"):
R_target_x += int(self.peite_dist.get())/10*math.sqrt(2)
R_target_y -= int(self.peite_dist.get())/10*math.sqrt(2)
if (self.type_dir.get() == "S"):
R_target_y -= int(self.peite_dist.get())/10
if (self.type_dir.get() == "SW"):
R_target_x -= int(self.peite_dist.get())/10*math.sqrt(2)
R_target_y -= int(self.peite_dist.get())/10*math.sqrt(2)
if (self.type_dir.get() == "W"):
R_target_x -= int(self.peite_dist.get())/10
if (self.type_dir.get() == "NW"):
R_target_x -= int(self.peite_dist.get())/10*math.sqrt(2)
R_target_y += int(self.peite_dist.get())/10*math.sqrt(2)
distR,angleR = calc_dist_angle(R_mort_x, R_mort_y, R_target_x, R_target_y)
self.labelDir.set("{:04.0f} - {:04.0f}".format(angle, angleR))
self.labelVert0.set("{} - {}".format(vert_0, calc_vert_angle(distR, h_diff, VC)))
self.labelVert1.set("{} - {}".format(vert_1, calc_vert_angle(distR, h_diff, VM)))
self.labelVert2.set("{} - {}".format(vert_0, calc_vert_angle(distR, h_diff, VF)))
else:
self.labelDir.set("{:04.0f}".format(angle))
self.labelVert0.set(vert_0)
self.labelVert1.set(vert_1)
self.labelVert2.set(vert_2)
self.labelDist.set("{:.0f} m".format(dist))
VC = 70 #speed close charge0
VM = 140 #speed medium charge1
VF = 200 #speed far charge2
G = 9.81 #gravity
def parse_grid (mort_pos,targ_pos):
x_m = int(mort_pos[:4])
y_m = int(mort_pos[4:])
x_t = int(targ_pos[:4])
y_t = int(targ_pos[4:])
return x_m, y_m, x_t, y_t
def calc_dist_angle(x_m,y_m,x_t,y_t):
d_x = (x_m - x_t)*10
d_y = (y_m-y_t)*10
angle = calc_hor_angle(d_x, d_y)
dist = math.sqrt((d_x)**2 + (d_y)**2)
return dist, angle
def calc_hor_angle(x, y):
return math.degrees((math.atan2(x, y))*17.777777)+3200
def calc_vert_angle(dist, y, v):
v_angle = '****'
Discriminant = v**4 - G*(G*dist**2+2*y*v**2)
if (Discriminant > 0): # tarkistetaan sqrt(neg.) varalta, esim jos kohde liian kaukana
sol1 = math.degrees(math.atan((v**2 + math.sqrt(Discriminant)) / (G*dist) ))*17.777777
sol2 = math.degrees(math.atan((v**2 - math.sqrt(Discriminant)) / (G*dist) ))*17.777777
if (sol1 < 1570 and sol1 > 800):
v_angle = "{:04.0f}".format(sol1)
elif (sol2 < 1570 and sol2 > 800):
v_angle = "{:04.0f}".format(sol2)
return v_angle
def calc_flight_time(v,dist,a):
return "{:.1f} s".format(dist/(v*math.cos(math.radians(float(a)/17.777777))))
def main():
app = mortarApp(None)
app.title('Mortar calculator')
app.mainloop()
main()
"10 tonni nii hoidan molemmilta polvilumpiot" -VarjoV3