41 lines
1.2 KiB
Text
41 lines
1.2 KiB
Text
# Projection-related helper functions for the MFD maps
|
|
|
|
var Camera = {
|
|
new: func(options) {
|
|
var m = {
|
|
parents: [Camera],
|
|
|
|
camGeo: options['camGeo'] or geo.aircraft_position(),
|
|
camHdg: options['camHdg'] or 0,
|
|
range: options['range'] or 10.0,
|
|
screenRange: options['screenRange'] or 256.0,
|
|
screenCX: options['screenCX'] or options['screenRange'] or 256.0,
|
|
screenCY: options['screenCY'] or options['screenRange'] or 256.0,
|
|
};
|
|
return m;
|
|
},
|
|
|
|
setRange: func(range) {
|
|
me.range = range;
|
|
},
|
|
|
|
repositon: func(geo, hdg) {
|
|
me.camGeo = geo;
|
|
me.camHdg = hdg;
|
|
},
|
|
|
|
project: func(targetGeo) {
|
|
var dist = me.camGeo.distance_to(targetGeo) * M2NM;
|
|
var bearing = me.camGeo.course_to(targetGeo) - me.camHdg;
|
|
return me.projectDistBearing(dist, bearing);
|
|
},
|
|
|
|
projectDistBearing: func(dist, bearing) {
|
|
var bearingRad = bearing * D2R;
|
|
var tx = math.sin(bearingRad) * dist;
|
|
var ty = -math.cos(bearingRad) * dist;
|
|
var x = tx * me.screenRange / me.range + me.screenCX;
|
|
var y = ty * me.screenRange / me.range + me.screenCY;
|
|
return [x, y];
|
|
},
|
|
};
|