本文整理汇总了C++中GeoVector::IsValid方法的典型用法代码示例。如果您正苦于以下问题:C++ GeoVector::IsValid方法的具体用法?C++ GeoVector::IsValid怎么用?C++ GeoVector::IsValid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GeoVector
的用法示例。
在下文中一共展示了GeoVector::IsValid方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fixed
inline void
GlideComputerAirData::NextLegEqThermal(const NMEAInfo &basic,
DerivedInfo &calculated,
const ComputerSettings &settings)
{
const GeoVector vector_remaining =
calculated.task_stats.current_leg.vector_remaining;
const GeoVector next_leg_vector =
calculated.task_stats.current_leg.next_leg_vector;
if(!next_leg_vector.IsValid() ||
!vector_remaining.IsValid() ||
!calculated.wind_available) {
// Assign a negative value to invalidate the result
calculated.next_leg_eq_thermal = fixed(-1);
return;
}
// Calculate wind component on current and next legs
const fixed wind_comp = calculated.wind.norm *
(calculated.wind.bearing - vector_remaining.bearing).fastcosine();
const fixed next_comp = calculated.wind.norm *
(calculated.wind.bearing - next_leg_vector.bearing).fastcosine();
calculated.next_leg_eq_thermal =
settings.polar.glide_polar_task.GetNextLegEqThermal(wind_comp, next_comp);
}
示例2: vector
void
UpdateInfoBoxNextDistanceNominal(InfoBoxData &data)
{
const Waypoint* way_point = protected_task_manager != NULL
? protected_task_manager->GetActiveWaypoint()
: NULL;
if (!way_point) {
data.SetInvalid();
return;
}
const NMEAInfo &basic = CommonInterface::Basic();
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
if (!task_stats.task_valid || !basic.location_available) {
data.SetInvalid();
return;
}
const GeoVector vector(basic.location, way_point->location);
if (!vector.IsValid()) {
data.SetInvalid();
return;
}
// Set Value
data.SetValueFromDistance(vector.distance);
data.SetValueColor(task_stats.inside_oz ? 3 : 0);
data.SetComment(vector.bearing);
}
示例3: if
static int
l_task_index(lua_State *L)
{
const char *name = lua_tostring(L, 2);
if (name == nullptr)
return 0;
else if (StringIsEqual(name, "bearing")) {
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining;
if (!task_stats.task_valid || !vector_remaining.IsValid() ||
vector_remaining.distance <= 10) {
return 0;
}
Lua::Push(L, vector_remaining.bearing);
} else if (StringIsEqual(name, "bearing_diff")) {
const NMEAInfo &basic = CommonInterface::Basic();
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining;
if (!basic.track_available || !task_stats.task_valid ||
!vector_remaining.IsValid() || vector_remaining.distance <= 10) {
return 0;
}
Lua::Push(L, vector_remaining.bearing - basic.track);
} else if (StringIsEqual(name, "radial")) {
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining;
if (!task_stats.task_valid || !vector_remaining.IsValid() ||
vector_remaining.distance <= 10) {
return 0;
}
Lua::Push(L, vector_remaining.bearing.Reciprocal());
} else if (StringIsEqual(name, "next_distance")) {
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining;
if (!task_stats.task_valid || !vector_remaining.IsValid())
return 0;
Lua::Push(L, vector_remaining.distance);
} else if (StringIsEqual(name, "next_distance_nominal")) {
const auto way_point = protected_task_manager != nullptr
? protected_task_manager->GetActiveWaypoint() : NULL;
if (!way_point) return 0;
const NMEAInfo &basic = CommonInterface::Basic();
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
if (!task_stats.task_valid || !basic.location_available) return 0;
const GeoVector vector(basic.location, way_point->location);
if (!vector.IsValid()) return 0;
Lua::Push(L, vector.distance);
} else if (StringIsEqual(name, "next_ete")) {
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
if (!task_stats.task_valid || !task_stats.current_leg.IsAchievable())
return 0;
assert(task_stats.current_leg.time_remaining_now >= 0);
Lua::Push(L, task_stats.current_leg.time_remaining_now);
} else if (StringIsEqual(name, "next_eta")) {
const auto &task_stats = CommonInterface::Calculated().task_stats;
const BrokenTime &now_local = CommonInterface::Calculated().date_time_local;
if (!task_stats.task_valid || !task_stats.current_leg.IsAchievable() ||
!now_local.IsPlausible()) {
return 0;
}
const BrokenTime t = now_local +
unsigned(task_stats.current_leg.solution_remaining.time_elapsed);
float time = t.hour + (float)(t.second/60);
Lua::Push(L, time);
} else if (StringIsEqual(name, "next_altitude_diff")) {
const auto &task_stats = CommonInterface::Calculated().task_stats;
const auto &next_solution = task_stats.current_leg.solution_remaining;
if (!task_stats.task_valid || !next_solution.IsAchievable())
return 0;
const auto &settings = CommonInterface::GetComputerSettings();
auto altitude_difference = next_solution.SelectAltitudeDifference(settings.task.glide);
Lua::Push(L, altitude_difference);
} else if (StringIsEqual(name, "nextmc0_altitude_diff")) {
const TaskStats &task_stats = CommonInterface::Calculated().task_stats;
if (!task_stats.task_valid || !task_stats.current_leg.solution_mc0.IsAchievable())
return 0;
const auto &settings = CommonInterface::GetComputerSettings();
auto altitude_difference = task_stats.current_leg.solution_mc0.SelectAltitudeDifference(settings.task.glide);
Lua::Push(L, altitude_difference);
} else if (StringIsEqual(name, "next_altitude_require")) {
const auto &task_stats = CommonInterface::Calculated().task_stats;
const auto &next_solution = task_stats.current_leg.solution_remaining;
if (!task_stats.task_valid || !next_solution.IsAchievable())
return 0;
Lua::Push(L, next_solution.GetRequiredAltitude());
} else if (StringIsEqual(name, "next_altitude_arrival")) {
const auto &basic = CommonInterface::Basic();
//.........这里部分代码省略.........