⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radar_beam_height.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
// Boost.Units - A C++ library for zero-overhead dimensional analysis and // unit/quantity manipulation and conversion//// Copyright (C) 2003-2008 Matthias Christian Schabel// Copyright (C) 2008 Steven Watanabe//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)/** \file    \brief radar_beam_height.cpp\detailedDemonstrate library usage for user test cases suggested by Michael Fawcett.Output:@verbatim//[radar_beam_height_outputradar range        : 300 nmiearth radius       : 6.37101e+06 mbeam height 1      : 18169.7 mbeam height 2      : 9.81085 nmibeam height 3      : 18169.7 mbeam height 4      : 9.81085 nmibeam height approx : 59488.4 ftbeam height approx : 18132.1 m//]@endverbatim**/#include <iostream>#include <boost/units/conversion.hpp>#include <boost/units/io.hpp>#include <boost/units/pow.hpp>#include <boost/units/systems/si.hpp>#include <boost/units/systems/si/prefixes.hpp>using boost::units::length_dimension;using boost::units::pow;using boost::units::root;using boost::units::quantity;using boost::units::unit;//[radar_beam_height_class_snippet_1namespace nautical {struct length_base_unit :     boost::units::base_unit<length_base_unit, length_dimension, 1>{    static std::string name()       { return "nautical mile"; }    static std::string symbol()     { return "nmi"; }};typedef boost::units::make_system<length_base_unit>::type system;/// unit typedefstypedef unit<length_dimension,system>    length;static const length mile,miles;} // namespace nautical// helper for conversions between nautical length and si lengthBOOST_UNITS_DEFINE_CONVERSION_FACTOR(nautical::length_base_unit,                                     boost::units::si::meter_base_unit,                                     double, 1.852e3);//]//[radar_beam_height_class_snippet_2namespace imperial {struct length_base_unit :     boost::units::base_unit<length_base_unit, length_dimension, 2>{    static std::string name()       { return "foot"; }    static std::string symbol()     { return "ft"; }};typedef boost::units::make_system<length_base_unit>::type system;/// unit typedefstypedef unit<length_dimension,system>    length;static const length foot,feet;} // imperial// helper for conversions between imperial length and si lengthBOOST_UNITS_DEFINE_CONVERSION_FACTOR(imperial::length_base_unit,                                     boost::units::si::meter_base_unit,                                     double, 1.0/3.28083989501312);//]// radar beam height functions//[radar_beam_height_function_snippet_1template<class System,typename T>quantity<unit<boost::units::length_dimension,System>,T>radar_beam_height(const quantity<unit<length_dimension,System>,T>& radar_range,                  const quantity<unit<length_dimension,System>,T>& earth_radius,                  T k = 4.0/3.0){    return quantity<unit<length_dimension,System>,T>        (pow<2>(radar_range)/(2.0*k*earth_radius));}//]//[radar_beam_height_function_snippet_2template<class return_type,class System1,class System2,typename T>return_typeradar_beam_height(const quantity<unit<length_dimension,System1>,T>& radar_range,                  const quantity<unit<length_dimension,System2>,T>& earth_radius,                  T k = 4.0/3.0){    // need to decide which system to use for calculation    const return_type   rr(radar_range),                        er(earth_radius);    return return_type(pow<2>(rr)/(2.0*k*er));}//]//[radar_beam_height_function_snippet_3quantity<imperial::length>radar_beam_height(const quantity<nautical::length>& range){    return quantity<imperial::length>        (pow<2>(range/(1.23*nautical::miles/root<2>(imperial::feet))));}//]int main(void){    using namespace boost::units;    using namespace boost::units::si;    using namespace nautical;    //[radar_beam_height_snippet_1    const quantity<nautical::length> radar_range(300.0*miles);    const quantity<si::length>       earth_radius(6371.0087714*kilo*meters);        const quantity<si::length>       beam_height_1(radar_beam_height(quantity<si::length>(radar_range),earth_radius));    const quantity<nautical::length> beam_height_2(radar_beam_height(radar_range,quantity<nautical::length>(earth_radius)));    const quantity<si::length>       beam_height_3(radar_beam_height< quantity<si::length> >(radar_range,earth_radius));    const quantity<nautical::length> beam_height_4(radar_beam_height< quantity<nautical::length> >(radar_range,earth_radius));    //]        std::cout << "radar range        : " << radar_range << std::endl              << "earth radius       : " << earth_radius << std::endl              << "beam height 1      : " << beam_height_1 << std::endl              << "beam height 2      : " << beam_height_2 << std::endl              << "beam height 3      : " << beam_height_3 << std::endl              << "beam height 4      : " << beam_height_4 << std::endl              << "beam height approx : " << radar_beam_height(radar_range)              << std::endl              << "beam height approx : "              << quantity<si::length>(radar_beam_height(radar_range))              << std::endl << std::endl;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -