Class | Rubygame::Ftor |
In: |
lib/rubygame/ftor.rb
lib/rubygame/ftor.rb |
Parent: | Object |
NOTE: Ftor is DEPRECATED and will be removed in Rubygame 3.0! A mostly-compatible vector class will be provided at or before that time.
NOTE: you must require ‘rubygame/ftor’ manually to gain access to Rubygame::Ftor. It is not imported with Rubygame by default!
Ftor ("Fake vecTOR"), a vector-like class for 2D position/movement.
(NB: See angle for an important note about why angles appear to be the opposite of what you may expect.)
Ftor is useful for storing 2D coordinates (x,y) as well as vector quantities such as velocity and acceleration (representationally, points and vectors are equivalent.) Although Ftors are always represented internally as Cartesian coordinates (x, y), it is possible to deal with an Ftor as polar coordinates (angle, magnitude) instead. See new_am and set_am!, for example.
Ftor is a "fake" vector because it has certain convenient properties which differ from "true" vectors (i.e. vectors in a strict mathematical sense).
Unlike vectors, Ftors may be multiplied or divided to another Ftor. This is equivalent to multiplying or dividing each component by the corresponding component in the second Ftor. If you like, you can think of this feature as scaling each component of the Ftor by a separate factor:
Ftor(a,b) * Ftor(c,d) = Ftor(a*c, b*d)
Of course, Ftors also have the usual vector behavior for addition/subraction between two Ftors, and multiplication/division of an Ftor by a scalar:
Ftor(a,b) + Ftor(c,d) = Ftor(a+c, b+d) Ftor(a,b) * n = Ftor(a*n, b*n)
Additionally, Ftor contains functions for manipulating itself. You can both get and set such properties as angle, magnitude, unit, and normal, and the Ftor will change in-place as needed. For example, if you set angle=, the vector will change to have the new angle, but keeps the same magnitude as before.
Ftor attempts to save processing time (at the expense of memory) by storing secondary properties (angle, magnitude, etc.) whenever they are calculated,so that they need not be calculated repeatedly. If the vector changes, the properties will be calculated again the next time they are needed. (In future versions, it may be possible to disable this feature for certain Ftors, for example if they will change very often, to save memory.)
PI | = | Math::PI |
HALF_PI | = | PI*0.5 |
THREE_HALF_PI | = | PI*1.5 |
TWO_PI | = | PI*2 |
PI | = | Math::PI |
HALF_PI | = | PI*0.5 |
THREE_HALF_PI | = | PI*1.5 |
TWO_PI | = | PI*2 |
x | [R] | |
x | [R] | |
y | [R] | |
y | [R] |
Perform multiplication of this Ftor by the scalar other, like so:
Ftor(a,b) * n = Ftor(a*n, b*n)
However, if this causes TypeError, attempt to extract indices 0 and 1 with other‘s #[] operator, and multiply them into the corresponding components of this Ftor, like so:
Ftor(a,b) * Ftor(c,d) = Ftor(a*c, b*d) Ftor(a,b) * [c,d] = Ftor(a*c, b*d)
Perform multiplication of this Ftor by the scalar other, like so:
Ftor(a,b) * n = Ftor(a*n, b*n)
However, if this causes TypeError, attempt to extract indices 0 and 1 with other‘s #[] operator, and multiply them into the corresponding components of this Ftor, like so:
Ftor(a,b) * Ftor(c,d) = Ftor(a*c, b*d) Ftor(a,b) * [c,d] = Ftor(a*c, b*d)
Return the angle (radians) this Ftor forms with the positive X axis. This is the same as the Ftor‘s angle in a polar coordinate system.
IMPORTANT: Because the positive Y axis on the Rubygame::Screen points downwards, an angle in the range 0..PI will appear to point downwards, rather than upwards! This also means that positive rotation will appear clockwise, and negative rotation will appear counterclockwise! This is the opposite of what you would expect in geometry class!
Return the angle (radians) this Ftor forms with the positive X axis. This is the same as the Ftor‘s angle in a polar coordinate system.
IMPORTANT: Because the positive Y axis on the Rubygame::Screen points downwards, an angle in the range 0..PI will appear to point downwards, rather than upwards! This also means that positive rotation will appear clockwise, and negative rotation will appear counterclockwise! This is the opposite of what you would expect in geometry class!
"Pretty print". Same as to_s, but components are displayed as rounded floats to 3 decimal places, for easy viewing.
"Pretty print". Same as to_s, but components are displayed as rounded floats to 3 decimal places, for easy viewing.