In r20428:
Add Vector3D crossproduct and Vector2D perpendicular function.
Describe geometric features of the two cross- and dot-product functions.
In r20429:
Extend the random map river algorithm (r20185) to allow arbitrary start and end points.
Reverse engineer and cleanup obfuscated Rivers map code, refs r11137.
Use vector algebra to replace magic equations and express geometric intend.
Fix seed typo by removing river curve duplicate.
On the Rivers map, use areAllies directly instead of copying the diplomacies to a 2D array called isRiver.
Use modulo operator instead of an if-statement with duplication to determine the neighbor of the last player, refs r11174.
In r20435:
Further clarify geometric meaning of the river painting in r11137 and r20429.
Refer to the normalized river vector instead of the river vector divided by the length of the river.
Rename mag to magnitude.