units etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
units etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

7 Mart 2018 Çarşamba

units derived_dimension Sınıfı

Giriş
Bu sınıf iki tane farklı tipten dimension ikişkisini belirtmek için kullanılır. Örneğin mass ve time dimension gibi.

1.Dimension sınıfından unit tanımlanır. kilogram/seconds gibi.
2. Unit'lerden quantity tanımlanır. Quantity nesneleri ile aritmetik işlemler yapılabilr.

Tanımlama


Örnek
Kütle ve zaman boyutunu tanımlamak için şöyle yaparız. Bu dimension kütle ve zaman ile ilgili örneğin kilogram_per_seconds gibi bir birim tanımlamak için kullanılabilir.
typedef boost::units::derived_dimension<
  boost::units::mass_base_dimension, 1,
  boost::units::time_base_dimension, -1
>::type mass_flow_rate_dimension;
Örnek
Elimizde şöyle bir kod olsun.
#include <boost/units/io.hpp>
#include <boost/units/systems/si.hpp>
#include <boost/units/systems/si/io.hpp>

namespace Units {
  using namespace boost::units;
  namespace SI = boost::units::si;

  template <class U> using Quantity = quantity<U>;

  typedef quantity<si::mass> Mass;
  typedef quantity<si::time> Time;

  typedef derived_dimension<mass_base_dimension, 1,
    time_base_dimension, -1>::type MassFlowDimension;
  typedef unit<MassFlowDimension, si::system> MassFlow;
  typedef Quantity<MassFlow> MassFlowRate;
  BOOST_UNITS_STATIC_CONSTANT(kilogram_per_seconds, MassFlow);
}
Şöyle yaparız
Units::MassFlowRate const mass_flow       = 7.0*Units::kilogram_per_seconds;
Units::MassFlowRate const other_mass_flow = 1.0*(Units::SI::kilogram / Units::SI::second);
Units::Mass         const total_flow      = mass_flow * (1.0*Units::SI::second);

std::cout << "mass_flow:       " << mass_flow       << "\n";
std::cout << "other_mass_flow: " << other_mass_flow << "\n";
std::cout << "total_flow:      " << total_flow      << "\n";
Çıktı olarak şunu alırız.
mass_flow:       7 kg s^-1
other_mass_flow: 1 kg s^-1
total_flow:      7 kg


7 Şubat 2018 Çarşamba

units

base_unit Sınıfı
Giriş
Şu satırı dahil ederiz
#include <boost/units/base_dimension.hpp>
#include <boost/units/io.hpp>
#include <boost/units/quantity.hpp>
#include <boost/units/unit.hpp>
#include <boost/units/base_unit.hpp>
#include <boost/units/systems/si/mass.hpp>

using namespace boost::units;
using namespace boost::units::si;
Tanımlama
Şöyle yaparız.
namespace units {

  struct slug_base_unit : base_unit<slug_base_unit, mass_dimension, 1>
  {
    static std::string name()               { return "slug"; }
    static std::string symbol()             { return "sl"; }
  };

  typedef slug_base_unit::unit_type slug_unit;

  /// unit constants
  BOOST_UNITS_STATIC_CONSTANT(slug, slug_unit);
  BOOST_UNITS_STATIC_CONSTANT(slugs, slug_unit);

  }
}
Constructor
Şöyle yaparız
quantity<slug_unit> A = 10.0 * slugs;
inch_base_unit Sınıfı
Bir base_unit'ten diğerine çevrim oranı için şöyle yaparız.
conversion_factor(imperial::inch_base_unit::unit_type(), si::meter_base_unit::unit_type())
mile_base_unit Sınıfı
milden metrik birime dönmek için şöyle yaparız.
#include <boost/units/base_units/us/mile.hpp>
#include <boost/units/base_units/metric/hour.hpp>

typedef boost::units::us::mile_base_unit::unit_type mile_unit;
typedef boost::units::metric::hour_base_unit::unit_type hour_unit;

typedef boost::units::divide_typeof_helper<mile_unit, hour_unit>::type miles_per_hour;
derived_dimension Sınıfı
derived_dimension Sınıfı yazısına taşıdım.

quantity Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/units/quantity.hpp>
Açıklaması şöyle.
A quantity represents a concrete amount of a unit. Thus, while the meter is the base unit of length in the SI system, 5.5 meters is a quantity of length in that system.
İmzası şöyle.
template<class Unit, class Y=double> class quantity;
İlk parametre unit (length,time,volume vs. gibi) ikinci parametre ise unit'in hangi tipten saklanacağıdır.

Örnek
Şöyle yaparız.
using boost::units::si::meters;
using Meter = boost::units::quantity<boost::units::si::length, double>;
Örnek
Şöyle yaparız.
typedef boost::units::quantity<Hertz_unit     , double> Hertz;
typedef boost::units::quantity<KilloHertz_unit, double> KilloHertz;
typedef boost::units::quantity<MegaHertz_unit , double> MegaHertz;
Daha önce tanımladığımız sabitleri quantit'ye çevirmek için şöyle yaparız.
Hertz      operator"" _Hz  (long double val) { return Hertz     (val *  Hz); }
KilloHertz operator"" _KHz (long double val) { return KilloHertz(val * KHz); }
MegaHertz  operator"" _MHz (long double val) { return MegaHertz (val * MHz); }
Kullanmak için şöyle yaparız.
Hertz      freq_1 = (10 *  Hz);
KilloHertz freq_2 = (10 * KHz);
MegaHertz  freq_3 = (10 * MHz);
// OR
Hertz      freq_4 = 10.0_Hz;
KilloHertz freq_5 = 10.0_KHz;
MegaHertz  freq_6 = 10.0_MHz;
// Convert between units
Hertz freq_7 = static_cast<Hertz>(10 * KHz);
Constructor
Constructor parametresi olarak sayı * unit verilir.
Örnek
Şöyle yaparız.
quantity<si::lenght> x = (10 * si::meters);
Şöyle yaparız.
quantity<si::foot_base_unit::unit_type> f (x); //32.8
Bazı çevrimleri yaptırmaz
quantity<si::time> t (x); //Metre zamana çevrilemez
Şöyle yaparız.
quantity<mass> C = 2.0 * kilograms;
Şöyle yaparız.
quantity<si::time> Time = 1.0 * second;
quantity<volume> vol = 1.0 * cubic_meters;
Kendi birimimiz ile şöyle yaparız.
typedef boost::units::quantity<mass_flow_rate_unit, double> mass_flow_rate;

BOOST_UNITS_STATIC_CONSTANT(kilogram_per_seconds, mass_flow_rate);
Scale Sınıfı
Şöyle yaparız. Aynı birime 1, 1000, ve 100,000 ile çarpılır.
typedef bu::make_scaled_unit<si::frequency, scale<10, static_rational<0> > >::type
  Hertz_unit;
typedef bu::make_scaled_unit<si::frequency, scale<10, static_rational<3> > >::type
  KilloHertz_unit;
typedef bu::make_scaled_unit<si::frequency, scale<10, static_rational<6> > >::type
  MegaHertz_unit;
Bazı sabitler tanımlanır. Şöyle yaparız.
BOOST_UNITS_STATIC_CONSTANT( Hz, Hertz_unit     );
BOOST_UNITS_STATIC_CONSTANT(KHz, KilloHertz_unit);
BOOST_UNITS_STATIC_CONSTANT(MHz, MegaHertz_unit );
unit Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/units/unit.hpp>
Tanımlama
unit tipi bir dimension + system bilgisine sahiptir.
Örnek
Şöyle yaparız.
typedef boost::units::derived_dimension<...>::type mass_flow_rate_dimension;

typedef boost::units::unit<mass_flow_rate_dimension,boost::units::si::system>
mass_flow_rate_unit;

Matematiksel İşlemler
units kütüphanesi matematiksel işlemler için destek veriyor.
abs metodu
Şöyle yaparız
units::abs(value)
fabs metod
Şöyle yaparız
units::fabs(value)