Binary angular measurement: Difference between revisions

Content deleted Content added
rm mention of "binary radian" or "brad": only isolated unreliable sources seem to mention it, so it appears to be the invention of one or two isolated SW developers
 
(23 intermediate revisions by 15 users not shown)
Line 1:
{{Use dmy dates|date=December 2022|cs1-dates=y}}
The terms '''binary angular measurement''' ('''BAM''')<ref name="ship"/> and '''binary angular measurement system''' ('''BAMS''')<ref name="BAMS"/> refer to certain methodologies for representing and manipulating [[angle]]s using [[binary number|binary]] ([[number base|base]] 2) [[fixed-point arithmetic]]. The [[unit of measre|unit]] of angular measure used in those methods may be called '''binary radian''' ('''brad''') or '''binary degree'''.
{{Use list-defined references|date=December 2022}}
The terms '''binaryBinary angular measurement''' ('''BAM''')<ref name="ship"/> (and the '''binary angular measurement system''', ('''BAMS''')<ref name="BAMS"/>) referis toa certainmeasure methodologies for representing and manipulatingof [[angle]]s using [[binary number|binary]]s ([[number base|base]] 2)and [[fixed-point arithmetic]]., in which a Thefull [[unitturn of measre(angle)|unitturn]] ofis angularrepresented measureby usedthe invalue those methods may be called '''binary radian''' ('''brad''') or '''binary degree'''1.
 
These representation of angles are often used in [[numerical control]] and [[digital signal processing]] applications, such as robotics, navigation,<ref name="lap2004"/> computer games,<ref name="sang1993"/> and digital sensors.,<ref name="para2005"/> taking Onadvantage of the otherimplicit hand,modular thisreduction systemachieved isby nottruncating adequatebinary fornumbers. situations whereIt themay numberalso ofbe fullused turnsas mustthe be[[fractional measured,part]] e.g.of toa monitor[[fixed-point number]] counting the rotationnumber of full rotations of e.g. a vehicle's wheels or ofa [[leadscrew]]s.
 
== Representation ==
[[Image:Binary angles.svg|360px|thumb|Binary angle measurement system. <span style="color:black">Black</span> is traditional degrees representation, <span style="color:green">green</span> is a BAM as a decimal number and <span style="color:red">red</span> is [[hexadecimal]] 32&nbsp;bit BAM. In this figure the 32-bit binary integers are interpreted as signed binary fixed-point values with scaling factor 2<sup>−31</sup>, representing fractions between −1.0 (exclusive) and +1 (inclusive).]]
=== Unsigned fraction of turn ===
In this system, an angle is represented by an ''n''-[[bit]] unsigned binary number in the rangesequence {0, ..., 2<sup>''n''</sup>−1} that is interpreted as ana multiple of 1/2<sup>''n''</sup> of a full turn; that is, 360/2<sup>''n''</sup> degrees or 2π/2<sup>''n''</sup> radians. The number can also be interpreted as a fraction of a full turn between 0 (inclusive) and 1 (exclusive) represented in binary fixed-point format with a scaling factor of 1/2<sup>''n''</sup>. Multiplying that fraction by 360° or 2π gives the angle in [[degree (angle)|degree]]s in the range 0 to 360, or in [[radian]]s, in the range 0 to 2π, respectively.
 
For example, with ''n'' = 8, the binary integers (00000000)<sub>2</sub> (fraction 0.00), (01000000)<sub>2</sub> (0.25), (10000000)<sub>2</sub> (0.50), and (11000000)<sub>2</sub> (0.75) represent the angular measures 0°, 90°, 180°, and 270°, respectively.
==Representation==
 
AThe main advantage of this system is that the addition or subtraction of the integer numeric values with the ''n''-bit arithmetic used in most computers produces results that are consistent with the geometry of angles. Namely, the integer result of the operation is automatically reduced [[modular arithmetic|modulo]] 2<sup>''n''</sup>, matching the fact that angles that differ by an integer number of full turns are equivalent. Thus one does not need to explicitly test or handle the wrap-around, as one must do when using other representations (such as number of degrees or radians in floating-point).<ref name="harg2019"/>
===Unsigned fraction of turn===
 
=== Signed fraction of turn ===
In this system, an angle is represented by an ''n''-[[bit]] unsigned binary number in the range {0 .. 2<sup>''n''</sup>−1} that is interpreted as an multiple of 1/2<sup>''n''</sup> of a full turn; that is, 360/2<sup>''n''</sup> degrees or 2π/2<sup>''n''</sup> radians. The number can also be interpreted as a fraction of a full turn between 0 (inclusive) and 1 (exclusive) represented in binary fixed-point format with a scaling factor of 1/2<sup>''n''</sup>. Multiplying that fraction by 360° or 2π gives the angle in [[degree (angle)|degree]]s in the range 0 to 360, or in [[radian]]s, in the range 0 to 2π, respectively.
[[Image:Binary angles.svg|360px|thumb|BinarySigned binary angle measurement system. <span style="color:{{black">|Black</span>}} is traditional degrees representation, <span style="color:{{green">|green</span>}} is a BAM as a decimal number and <span style="color:{{red">|red</span>}} is [[hexadecimal]] 32&nbsp;-bit BAM. In this figure the 32-bit binary integers are interpreted as signed binary fixed-point values with scaling factor 2<sup>−31</sup>, representing fractions between −1.0 (exclusiveinclusive) and +1.0 (inclusiveexclusive).]]
Alternatively, the same ''n'' bits can also be interpreted as a signed integer in the range {−2<sup>''n''−1</sup>, ..., 2<sup>''n''−1</sup>-1}−1 in the [[two's complement]] convention. They can also be interpretesinterpreted as a fraction of a full turn between −0.5 (inclusive) and +0.5 (exclusive) in signed fixed-point format, with the same scaling factor; or a fraction of half-turn between −1.0 (inclusive) and +1.0 (exclusive) with scaling factor 1/2<sup>''n''−1</sup>.
 
Either way, these numbers can then be interpreted as angles between -180−180° (inclusive) and +180° (exclusive), with −0.25 meaning −90° and +0.25 meaning +90°. The result of adding or subtracting the numerical values will have the same sign as the result of adding or subtracting angles, once reduced to this range. This interpretation eliminates the need to reduce angles to the range [{{closed-closed|−π, ]}} when computing [[trigonometric functions]].
For example, with ''n'' = 8, the binary integers (00000000)<sub>2</sub> (fraction 0.00), (01000000)<sub>2</sub> (0.25), (10000000)<sub>2</sub> (0.50), and (11000000)<sub>2</sub> (0.75) represent the angular measures 0°, 90°, 180°, and 270°, respectively.
 
== Example ==
A main advantage of this system is that the addition or subtraction of the integer numeric values with the ''n''-bit arithmetic used in most computers produces results that are consistent with the geometry of angles. Namely, the integer result of the operation is automatically reduced [[modular arithmetic|modulo]] 2<sup>''n''</sup>, matching the fact that angles that differ by an integer number of full turns are equivalent. Thus one does not need to explicitly test or handle the wrap-around, as one must do when using other representations (such as number of degrees or radians in floating-point).<ref name=harg2019/>
In the orbital data broadcast by the [[Global Positioning System]], angles are encoded using binary angular measurement. In particular, each satellite broadcasts an [[ephemeris]] containing its six Keplerian [[orbital elements]]. Four of these are angles, which are encoded as 32-bit binary angles. In the lower-precision [[GPS signals#Almanac|almanac]] data, 24-bit binary angles are used.<!--Except for inclination, which is specially encoded, a detail considered too esoteric to mention here.-->
 
===Signed fractionSee ofalso turn===
* [[Grade (angle)|Grade]], 1/400 of a full turn.
 
* [[Binary scaling]]
Alternatively, the same ''n'' bits can also be interpreted as a signed integer in the range {−2<sup>''n''−1</sup> .. 2<sup>''n''−1</sup>-1} in the [[two's complement]] convention. They can also be interpretes as a fraction of a full turn between −0.5 (inclusive) and +0.5 (exclusive) in signed fixed-point format, with the same scaling factor; or a fraction of half-turn between −1.0 (inclusive) and +1.0 (exclusive) with scaling factor 1/2<sup>''n''−1</sup>.
* [[CORDIC]], algorithms for trigonometric functions.
 
Either way, these numbers can then be interpreted as angles between -180° (inclusive) and +180° (exclusive), with −0.25 meaning −90° and +0.25 meaning +90°. The result of adding or subtracting the numerical values will have the same sign as the result of adding or subtracting angles, once reduced to this range. This interpretation eliminates the need to reduce angles to the range [−π,+π] when computing [[trigonometric functions]].
 
==See also==
 
* [[Grade (angle)|Grade]], 1/400 of a full turn.
* [[CORDIC]], algorithms for trigonometric functions.
* [[Constructible polygon]], including all polygons with 2<sup>''n''</sup> sides
 
== References ==
{{reflist|refs=
 
<references>
 
<ref name="ship">{{cite web |title=Binary angular measurement |url=http://www.tpub.com/content/fc/14100/css/14100_314.htm |archive-url=https://web.archive.org/web/20091221160257/http://www.tpub.com/content/fc/14100/css/14100_314.htm |archive-date=2009-12-21}}</ref>
 
<ref name="BAMS">{{cite web |title=Binary Angular Measurement System |work=acronyms.thefreedictionary |url=http://acronyms.thefreedictionary.com/Binary+Angular+Measurement+System}}</ref>
<ref name="harg2019">{{cite web |title=Angles, integers, and modulo arithmetic |author-first=Shawn |author-last=Hargreaves |author-link=:pl:Shawn Hargreaves |publisher=blogs.msdn.com |url=http://blogs.msdn.com/shawnhar/archive/2010/01/04/angles-integers-and-modulo-arithmetic.aspx |access-date=2019-08-05 |url-status=live |archive-url=https://web.archive.org/web/20190630223817/http://www.shawnhargreaves.com/blogindex.html |archive-date=2019-06-30}}</ref>
<ref name="lap2004">{{cite book |title=Real-Time Systems Design and Analysis |chapter=Chapter 7.5.3, Binary Angular Measure |author-first=Phillip A. |author-last=LaPlante |date=2004 |websitepublisher=www.globalspec.comWiley |chapter-url=http://www.globalspec.com/reference/14722/160210/Chapter-7-5-3-Binary-Angular-Measure |isbn=0-471-22855-9}}</ref>
<ref name="sang1993">{{cite web |title=Doom 1993 code review - Section "Walls" |author-first=Fabien |author-last=Sanglard |date=2010-01-13 |website=fabiensanglard.net |url=http://fabiensanglard.net/doomIphone/doomClassicRenderer.php}}</ref>
<ref name="para2005">{{cite web |title=Hitachi HM55B Compass Module (#29123) |series=Parallax Digital Compass Sensor (#29123) |publisher=[[Parallax, Inc. (company)|Parallax, Inc.]] |date=May 2005 |website=www.hobbyengineering.com |via=www.parallax.com |url=http://www.hobbyengineering.com/specs/PX-29123.pdf |url-status=dead |archive-url=https://web.archive.org/web/20110711172521/http://www.hobbyengineering.com/specs/PX-29123.pdf |archive-date=2011-07-11}}</ref>
}}
 
[[Category:Units of plane angle]]
<ref name=harg2019>{{cite web |title=Angles, integers, and modulo arithmetic |author-first=Shawn |author-last=Hargreaves |author-link=:pl:Shawn Hargreaves |publisher=blogs.msdn.com |url=http://blogs.msdn.com/shawnhar/archive/2010/01/04/angles-integers-and-modulo-arithmetic.aspx |access-date=2019-08-05 |url-status=live |archive-url=https://web.archive.org/web/20190630223817/http://www.shawnhargreaves.com/blogindex.html |archive-date=2019-06-30}}</ref>
[[Category:Binary arithmetic]]
 
<ref name=lap2004>{{cite book |title=Real-Time Systems Design and Analysis |chapter=Chapter 7.5.3, Binary Angular Measure |author-first=Phillip A. |author-last=LaPlante |date=2004 |website=www.globalspec.com |chapter-url=http://www.globalspec.com/reference/14722/160210/Chapter-7-5-3-Binary-Angular-Measure}}</ref>
 
<ref name=sang1993>{{cite web |title=Doom 1993 code review - Section "Walls" |author-first=Fabien |author-last=Sanglard |date=2010-01-13 |website=fabiensanglard.net |url=http://fabiensanglard.net/doomIphone/doomClassicRenderer.php}}</ref>
 
<ref name=para2005>{{cite web |title=Hitachi HM55B Compass Module (#29123) |series=Parallax Digital Compass Sensor (#29123) |publisher=[[Parallax, Inc. (company)|Parallax, Inc.]] |date=May 2005 |website=www.hobbyengineering.com |via=www.parallax.com |url=http://www.hobbyengineering.com/specs/PX-29123.pdf |url-status=dead |archive-url=https://web.archive.org/web/20110711172521/http://www.hobbyengineering.com/specs/PX-29123.pdf |archive-date=2011-07-11}}</ref>
 
</references>