Kuvankaappausketju

Härö
Posts: 236
Joined: 01 Mar 2015, 18:57

Re: Kuvankaappausketju

Post by Härö »

karnaubavaha
Posts: 63
Joined: 02 Jan 2016, 11:55
Location: Helsinki
Contact:

Re: Kuvankaappausketju

Post by karnaubavaha »

Viikkopelit 4.5.2016

Image
Image
User avatar
Cpl Honkonen
Posts: 657
Joined: 01 Aug 2015, 14:39
Location: Iisalmi

Re: Kuvankaappausketju

Post by Cpl Honkonen »

Image

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
Miccosx
Posts: 86
Joined: 10 Feb 2015, 10:19

Re: Kuvankaappausketju

Post by Miccosx »

Image
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..
Bummeri
Posts: 3009
Joined: 09 Nov 2013, 14:35

Re: Kuvankaappausketju

Post by Bummeri »

Ei nuo sinun kuvat honkkonen näy.
"Dataa on saatava." -DataNummi
"Toteutus on pilalla, pelkkää paskaa tilalla." -MyösNummi
User avatar
Cpl Honkonen
Posts: 657
Joined: 01 Aug 2015, 14:39
Location: Iisalmi

Re: Kuvankaappausketju

Post by Cpl Honkonen »

Mulla onnistuu kans mk6, d30 ja m119. Eikä tuon käyttö niin paha ole kun sen ikkunan asemoi oikein gpssää tai karttaa vasten.
Bummeri wrote:Ei nuo sinun kuvat honkkonen näy.
Ilmeisesti se näkyy välillä ja välillä ei ja kaikkea muuta.
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
Trade
Posts: 456
Joined: 09 Jun 2015, 19:20

Re: Kuvankaappausketju

Post by Trade »

Image
Image
Image
Image
Miccosx
Posts: 86
Joined: 10 Feb 2015, 10:19

Re: Kuvankaappausketju

Post by Miccosx »

Image
Kohta Jesteri kostaa
Temppa
Posts: 699
Joined: 30 Jan 2014, 07:33

Re: Kuvankaappausketju

Post by Temppa »

Image
Image
Image
Arska
Posts: 533
Joined: 30 Sep 2013, 17:09
Location: PKS

Re: Kuvankaappausketju

Post by Arska »

Cpl Honkonen wrote:Image

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
Post Reply