From 40d9b0e400f449ba38ad8f303d398ed927f54929 Mon Sep 17 00:00:00 2001 From: abory <abory> Date: Thu, 5 Jun 2008 19:37:32 +0000 Subject: [PATCH] - Jettoo (glazmax) and Alexis: Radar Visibility Calculator. --- Aircraft/Generic/radardist.nas | 189 +++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Aircraft/Generic/radardist.nas diff --git a/Aircraft/Generic/radardist.nas b/Aircraft/Generic/radardist.nas new file mode 100644 index 000000000..b888611e2 --- /dev/null +++ b/Aircraft/Generic/radardist.nas @@ -0,0 +1,189 @@ +### Radar Visibility Calculator + +# Jettoo (glazmax) and xiii (Alexis) + +# my_maxrange(myaircraft): finds our own aircraft max radar range in a table. +# Returns my_radarcorr in kilometers. + +# radis(i, my_radarcorr): find multiplayer[i], its Radar Cross Section (RCS), +# applies factor upon our altitude, shorter radar detection distance (due to air +# turbulence), then factor upon its altitude above ground, and finaly computes if +# it is detectable given our radar range. +# Returns 1 if detectable, 0 if not. + + + +var FT2M = 0.3048; +var NM2M = 1852; + + +var my_maxrange = func(myaircraft) { + var myacname = aircraftData[myaircraft]; + if (myacname == nil){ + myacname = 0; + } + var my_radar_area = radarData[myacname][7]; + var my_radar_range = radarData[myacname][5]; + return( my_radar_range / my_radar_area); + #var my_plane = radarData[myacname][2]; + #print (my_plane); + #print (my_radar_area); +} + + + +var radis = func(i, my_radarcorr) { + # Get the multiplayer aircraft name. + var mpnode_string = "ai/models/multiplayer[" ~ i ~ "]"; + var mpnode = props.globals.getNode(mpnode_string); + var mpname_node_string = mpnode_string ~ "/sim/model/path"; + var mpname_node = props.globals.getNode(mpname_node_string); + + if (mpname_node != nil) { + var mpname = mpname_node.getValue(); + if (mpname != nil) { + var splitname = split("/", mpname); + #debug.dump(splitname); + var cutname = splitname[1]; + #print (cutname); + + # Calculate the rcs detection range, + # if aircraft is not found in list, 0 (generic) will be used. + var acname = aircraftData[cutname]; + if (acname == nil) { acname = 0 } + var rcs_4r = radarData[acname][3]; + var radartype = radarData[acname][1]; + + # Add a correction factor for altitude, as lower alt means + # shorter radar distance (due to air turbulence). + var alt_corr = 1; + var alt_ac = mpnode.getNode("position/altitude-ft").getValue(); + if (alt_ac <= 1000) { + alt_corr = 0.6; + } elsif ((alt_ac > 1000) and (alt_ac <= 5000)) { + alt_corr = 0.8; + } + + # Add a correction factor for altitude AGL. + var agl_corr = 1; + var mp_lon = mpnode.getNode("position/longitude-deg").getValue(); + var mp_lat = mpnode.getNode("position/latitude-deg").getValue(); + var mp_pos = geo.Coord.new().set_latlon(mp_lat, mp_lon); + var pos_elev = geo.elevation(mp_pos.lat(), mp_pos.lon()); + var mp_agl = alt_ac - ( pos_elev / FT2M ); + if (mp_agl <= 20) { + agl_corr = 0.03; + } elsif ((mp_agl > 20) and (mp_agl <= 50)) { + agl_corr = 0.08; + } elsif ((mp_agl > 50) and (mp_agl <= 120)) { + agl_corr = 0.8; + } + + # Calculate the detection distance. + var det_range = my_radarcorr * rcs_4r * alt_corr * agl_corr; + #print (radartype); + #print (rcs_4r); + #print (det_range); + + ### Compare if aircraft is in detection range and return. + var act_range = mpnode.getNode("radar/range-nm").getValue(); + if ((act_range == nil) or (act_range == 0)) { + act_range = 500; + } + if ((det_range / NM2M) >= act_range) { + return(1); + } + } + } + return(0); +} + +### convert aircraft to lookup number for table below: + +aircraftData = { + "generic" : "0", + "707" : "1", + "737-300" : "2", + "747" : "3", + "787" : "4","777" : "4", + "A24-Viking" : "5", + "A-10" : "6", + "A300" : "7", + "A320" : "8", + "A380" : "9", + "a4" : "10", + "A-6E" : "11", + "A6M2" : "12", + "Albatross" : "13", + "Aerostar-700" : "14", + "Alouette-II" : "15", + "Alouette-III" : "16", + "Alphajet" : "17", + "an-2" : "18", + "AN-225" : "19", + "apache" : "20", + "ASK21" : "21","asw20" : "21","bocian" : "21", + "b1900d" : "22", + "B-1B" : "23", + "B-2" : "24", + "b29" : "25", + "B-52F" : "26", + "BAC-TSR2" : "27", + "beaufighter" : "28", + "bf109" : "29", + "Buccaneer" : "30", + "c310" : "31","c310u3a" : "31", + "c172" : "32","c172p" : "32","c172r" : "32", + "c182" : "32","c182rg" : "32", + "f-14b" : "33", + "f15" : "34","f15c" : "34", + "f16" : "35", + "Lightning" : "36", + "SR71-Blackbird" : "37", + "Tornado" : "38" + +}; + +### radar lookup table , consisting aircraft name, RCS(m2), 4th root of RCS, radar type, max. radar range(km), max. radar range target seize(RCS)m2, 4th root of radar RCS + +radarData = [ + [0, "generic", 5, 1.49, "APG-63", 150, 100, 3.16], + [1, "707", 30, 2.34, "none", 0, 0, 0],#guess + [2, "737", 20, 2.11, "none", 0, 0, 0],#guess + [3, "747", 30, 2.34, "none", 0, 0, 0],#guess + [4, "787", 12, 1.86, "none", 0, 0, 0],#guess + [5, "A24-Viking", 2, 1.19, "none", 0, 0, 0],#guess + [6, "A-10", 25, 2.23, "none", 0, 0, 0], + [7, "A300", 25, 2.23, "none", 0, 0, 0],#guess + [8, "A320", 15, 1.96, "none", 0, 0, 0],#guess + [9, "A380", 20, 2.11, "none", 0, 0, 0],#guess + [10, "a4", 10, 1.77, "APG-53", 15, 5, 1.49], + [11, "A-6E", 14, 1.93, "APQ-112", 150, 100, 3.16], + [12, "A6M2", 15, 1.96, "none", 0, 0, 0],#guess + [13, "Albatross", 40, 2.51, "none", 0, 0, 0],#guess + [14, "Aerostar-700", 10, 1.86, "none", 0, 0, 0],#guess + [15, "Alouette-II", 15, 2.51, "none", 0, 0, 0],#guess + [16, "Alouette-III", 20, 2.11, "none", 0, 0, 0],#guess + [17, "Alphajet", 5, 1.49, "none", 0, 0, 0],#guess + [18, "an-2", 2, 1.19, "none", 0, 0, 0],#guess + [19, "AN-225", 45, 2.59, "unknown", 0, 0, 0],#guess + [20, "apache", 30, 2.34, "APG-78", 8, 1, 1],#guess + [21, "ASK21", 1, 1, "none", 0, 0, 0],#guess + [22, "b1900d", 20, 2.11, "wx500", 60, 100, 3.16],#guess + [23, "B-1B", 4, 1.41, "APQ-164", 296, 100, 3.16], + [24, "B-2", 0.0015, 0.19, "APQ-181", 333, 100, 3.16], + [25, "b29", 100, 3.16, "APQ-19", 45, 100, 3.16], + [26, "B-52F", 100, 3.16, "APQ-166", 296, 100, 3.16], + [27, "BAC-TSR2", 10, 1.86, "Blue Parrot", 46, 100, 3.16], + [28, "beaufighter", 9, 1.73, "none", 0, 0, 0], + [29, "bf109", 15, 1.96, "none", 0, 0, 0], + [30, "Buccaneer", 10, 1.77, "Blue Parrot", 46, 100, 3.16], + [31, "c310", 4, 1.41, "none", 0, 0, 0], + [32, "c172", 2, 1.19, "none", 0, 0, 0], + [33, "f-14b", 25, 2.23, "AWG-9", 333, 100, 3.16], + [34, "f-15", 30, 2.34, "APG-70", 185, 100, 3.16], + [35, "f16", 1.5, 1.11, "APG-68", 296, 100, 3.16], + [36, "Lightning", 5, 1.49, "AI-23", 111, 100, 3.16], + [37, "SR71", 0.015, 0.35, "APQ-108", 200, 100, 3.16],#range classified + [38, "Tornado", 7, 1.63, "Foxhunter", 210, 100, 3.16] +];