{"id":"v001","input":{"course":90,"tas":120,"wind_direction":30,"wind_speed":20},"expect":{"result.groundspeed.value":108.74342087037917,"result.heading.value":81.70107893206672,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v002","input":{"course":0,"tas":100,"wind_direction":270,"wind_speed":15},"expect":{"result.groundspeed.value":98.86859966642594,"result.heading.value":351.37307344132137,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v003","input":{"course":225,"tas":150,"wind_direction":180,"wind_speed":40},"expect":{"result.groundspeed.value":119.02492737910046,"result.heading.value":214.1311351343324,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v004","input":{"course":310,"tas":95,"wind_direction":10,"wind_speed":25},"expect":{"result.groundspeed.value":80.0,"result.heading.value":323.1735511072589,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v005","input":{"course":45,"tas":200,"wind_direction":45,"wind_speed":30},"expect":{"result.groundspeed.value":170.0,"result.heading.value":45.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v006","input":{"course":180,"tas":80,"wind_direction":0,"wind_speed":20},"expect":{"result.groundspeed.value":100.0,"result.heading.value":180.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v007","input":{"course":135,"tas":110,"wind_direction":200,"wind_speed":18},"expect":{"result.groundspeed.value":101.17645648069342,"result.heading.value":143.52870640797943,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v008","input":{"course":270,"tas":140,"wind_direction":300,"wind_speed":35},"expect":{"result.groundspeed.value":108.59105469843566,"result.heading.value":277.1807557814583,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v009","input":{"course":20,"tas":90,"wind_direction":100,"wind_speed":12},"expect":{"result.groundspeed.value":87.13697131174123,"result.heading.value":27.54516584881617,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v010","input":{"course":355,"tas":105,"wind_direction":10,"wind_speed":28},"expect":{"result.groundspeed.value":77.70369241586647,"result.heading.value":358.95761000871386,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v011","input":{"course":160,"tas":250,"wind_direction":270,"wind_speed":60},"expect":{"result.groundspeed.value":264.08048270419386,"result.heading.value":173.03382424054095,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v012","input":{"course":75,"tas":65,"wind_direction":330,"wind_speed":20},"expect":{"result.groundspeed.value":67.2392113180338,"result.heading.value":57.71001715032008,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v013","input":{"course":200,"tas":180,"wind_direction":20,"wind_speed":45},"expect":{"result.groundspeed.value":225.0,"result.heading.value":200.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v014","input":{"course":240,"tas":120,"wind_direction":240,"wind_speed":25},"expect":{"result.groundspeed.value":95.0,"result.heading.value":240.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v015","input":{"course":5,"tas":130,"wind_direction":185,"wind_speed":30},"expect":{"result.groundspeed.value":160.0,"result.heading.value":5.000000000000002,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v016","input":{"course":110,"tas":85,"wind_direction":60,"wind_speed":15},"expect":{"result.groundspeed.value":74.57792570239125,"result.heading.value":102.23072202393911,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v017","input":{"course":290,"tas":300,"wind_direction":250,"wind_speed":80},"expect":{"result.groundspeed.value":234.27637784411036,"result.heading.value":280.1301887440118,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v018","input":{"course":60,"tas":75,"wind_direction":150,"wind_speed":30},"expect":{"result.groundspeed.value":68.7386354243376,"result.heading.value":83.57817847820183,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v019","input":{"course":90,"tas":120,"wind_direction":270,"wind_speed":30},"expect":{"result.groundspeed.value":150.0,"result.heading.value":90.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v020","input":{"course":330,"tas":160,"wind_direction":330,"wind_speed":50},"expect":{"result.groundspeed.value":110.0,"result.heading.value":330.0,"ok":true},"source":"Independent Python implementation of the ICAO Doc 7488/3 defining equations (tools/vectors/gen_aviation.py)","sourceVersion":"Doc 7488/3 (1993)","tolerance":{"result.groundspeed.value":{"abs":1e-06,"rel":1e-12},"result.heading.value":{"abs":1e-06,"rel":1e-12}}}
{"id":"v021","input":{"course":90,"tas":120,"wind_direction":45,"wind_speed":40},"expect":{"result.groundspeed.value":88,"result.heading.value":76,"ok":true},"source":"FAA Pilot's Handbook of Aeronautical Knowledge (FAA-H-8083-25C), worked example read from the published chart or table","sourceVersion":"FAA-H-8083-25C (2023)","tolerance":{"result.groundspeed.value":{"abs":1.0},"result.heading.value":{"abs":1.0}}}
{"id":"v022","input":{"course":90,"tas":120,"wind_direction":90,"wind_speed":20},"expect":{"result.wind_correction_angle.value":0,"result.groundspeed.value":100,"result.heading.value":90,"summary":"Fly heading 90° for a groundspeed of 100 kt, with no wind correction.","ok":true},"source":"Hand computation of the PHAK wind triangle (FAA-H-8083-25C, Navigation): a direct headwind needs no correction, and groundspeed = TAS − W","sourceVersion":"FAA-H-8083-25C (2023)","tolerance":{"result.wind_correction_angle.value":{"abs":1e-9},"result.groundspeed.value":{"abs":1e-9},"result.heading.value":{"abs":1e-9}}}
