Expressions: Difference between revisions

From FlightGear wiki
Jump to navigation Jump to search
m (Philosopher moved page Expression to Expressions: To match Bindings)
m (→‎Sample Expressions: Clarification about order, since SGPropertyNodes are generally used as unordered associative containers versus vectors)
Line 13: Line 13:


== Sample Expressions ==
== Sample Expressions ==
This is a sample expression for c = sqrt(a*a + b^2)
This is a sample expression for c = sqrt(a*a + b^2). Children/arguments are parsed in the order they appear in in the file (or the order in which they are set via property methods).
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<expression>
<expression>

Revision as of 02:35, 11 September 2013

This article is a stub. You can help the wiki by expanding it.

Expressions (or SGExpressions) are a feature of the SimGear library and provide a nice way of implementing complex math formulas using XML syntax. They are supported in many systems within the FlightGear code.

Beware: Expressions do not check if your math creates floating point exceptions (like division by zero conditions, taking the square root of a negative number, etc.). This can cause undefined behavior and may result in NaNs or even Cascading NaNs.

Usage

Expressions are supported in

Sample Expressions

This is a sample expression for c = sqrt(a*a + b^2). Children/arguments are parsed in the order they appear in in the file (or the order in which they are set via property methods).

<expression>
  <sqrt>
    <sum>
      <product>
        <property>/value/a</property>
        <property>/value/a</property>
      </product>
      <pow>
        <property>/value/b</property>
        <value>2</value>
      </pow>
    </sum>
  </sqrt>
</expression>

Supported elements

<acos>
<asin>
<atan>
<ceil>
<cos>
<cosh>
<exp>
<floor>
<log>
<log10>
<rad2deg>
<sin>
<sinh>
<sqrt>
<tan>
<tanh>
<atan2>
<div>
<mod>
<pow>
<value>
<property>
<abs> <!-- also: fabs -->
<sqr>
<clip>
<div>
<mod>
<sum>
<difference> <!-- also: dif -->
<product> <!-- also: prod -->
<min>
<max>
<table>