Kuvankaappausketju

IsaiahCortez
Posts: 340
Joined: 29 Jul 2013, 00:09
Location: Keskimmäinen sormi

Re: Kuvankaappausketju

Post by IsaiahCortez »

Arska wrote:
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()
Arvaillaanko mitä tekee vai kerrotko?
“If you don’t have enough artillery, quit.”
– General Richard Cavasos
"Kylmä, nälkä ja väsymys ovat siviilin harhaluuloja, sotilas tuntee puutetta ainoastaan ampumatarvikkeista."
User avatar
Anatooli
Posts: 164
Joined: 26 Jul 2013, 18:15

Re: Kuvankaappausketju

Post by Anatooli »

IsaiahCortez wrote: Arvaillaanko mitä tekee vai kerrotko?
Lataa python ja tallenna toi Arskan skripti .py tiedostopäätteellä. Tämän jälkeen se pitäisi pystyä käynnistämään tuplaklikkaamalla.

Näyttää tältä:
Image
Semper ubi sub ubi
User avatar
Tuntematon
Posts: 2291
Joined: 19 May 2015, 15:29
Location: Valkeakoski
Contact:

Re: Kuvankaappausketju

Post by Tuntematon »

Noni jätetääs tää ketju nyt rauhaan kaikelta ylimääräiseltä roskalta ja laitetaan vaan hienoja arma peli kuvia ;)
User avatar
Cpl Honkonen
Posts: 657
Joined: 01 Aug 2015, 14:39
Location: Iisalmi

Re: Kuvankaappausketju

Post by Cpl Honkonen »

On mulla tuo arskan jutska ollu jo miljoona aikaa kun joku jako se njoskus tessussa. Mutta en mää hiffannu miten sitä käytetään koska ei ollu käyttöohjetta :D
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
User avatar
Nummi
Posts: 1589
Joined: 26 Nov 2013, 01:52
Location: Stadi

Re: Kuvankaappausketju

Post by Nummi »

Cpl Honkonen wrote:On mulla tuo arskan jutska ollu jo miljoona aikaa kun joku jako se njoskus tessussa. Mutta en mää hiffannu miten sitä käytetään koska ei ollu käyttöohjetta :D
Miksi tätä viestiä ei pysty lukemaan. Ärsyttävää.

Jotta ei mene OT:ksi: keskiverto Arman pelaajia edustamassa hoodeilla
Furean wrote:Pitää muistaa, että ruotsalaisethan pani melkein koko Suomen kansaa.
ruoste wrote:Dataa on saatava.
User avatar
Konzig
Posts: 416
Joined: 08 Jan 2014, 07:57

Re: Kuvankaappausketju

Post by Konzig »

Vaihteeksi taas kuvia:

Image

Image

Image

Suoraviivaista toimintaa Irakissa. Toivottavasti oli shiiamoskeija, jos hyökkääjät oli sunneja - tai toisinpäin. Muuten mullah on vihainen.
Temppa
Posts: 699
Joined: 30 Jan 2014, 07:33

Re: Kuvankaappausketju

Post by Temppa »

Image
Image
Image
Furrezi
Posts: 23
Joined: 23 Nov 2015, 11:27

Re: Kuvankaappausketju

Post by Furrezi »

Image
Lääkintätarvikkeita ainakin kului (ja sinkoja). :)
karnaubavaha
Posts: 63
Joined: 02 Jan 2016, 11:55
Location: Helsinki
Contact:

Re: Kuvankaappausketju

Post by karnaubavaha »

14.5. Viikkospeels

Image
Image
Image
aapalo
Posts: 66
Joined: 30 Sep 2015, 23:32

Re: Kuvankaappausketju

Post by aapalo »

Sain vihdoin aikaiseksi pistää kuvia jakoon. Kansiossa kuvia noin puolen vuoden ajalta, sekä virallisista että epävirallisista.
http://imgur.com/a/Xkz8L
Post Reply