Positions
(require posn) | package: jack-posn |
This library includes functions and forms for working with points in two dimensions.
source code: https://github.com/jackfirth/racket-posn
A prefab struct representing a point in 2d space. This library treats x as increasing when moving to the right and y as increasing when moving up.
value
Predicate recognizing the origin.
Returns the sum of posn1 and posn2.
procedure
(posn-subtract posn1 posn2) → posn?
posn1 : posn? posn2 : posn? Returns the difference of posn1 and posn2.Example:
> (posn-subtract (posn 2 3) (posn 5 2)) '#s(posn -3 1)
procedure
(posn-negate a-posn) → posn?
a-posn : posn? Returns the negation a-posn, flipping the signs of both it’s x and y parts.Example:
> (posn-negate (posn 5 -1)) '#s(posn -5 1)
Returns the sum of all the posns.
procedure
(posn-multiply posn1 posn2) → posn?
posn1 : posn? posn2 : posn? Example:
> (posn-multiply (posn 2 3) (posn -5 2)) '#s(posn -10 6)
procedure
(posn-divide posn1 posn2) → posn?
posn1 : posn? posn2 : posn? Example:
> (posn-divide (posn 10 6) (posn 5 -2)) '#s(posn 2 -3)
procedure
(posn-product posns) → posn?
posns : (listof posn?) Returns the product of all the posns.Example:
> (posn-product (list (posn 3 5) (posn 7 2) (posn -2 3))) '#s(posn -42 30)
procedure
(posn-scale scale-factor a-posn) → posn?
scale-factor : real? a-posn : posn? Scales a-posn’s x and y coordinates by scale-factor.Example:
> (posn-scale 3 (posn 1 2)) '#s(posn 3 6)
procedure
(posn-scale-x scale-factor a-posn) → posn?
scale-factor : real? a-posn : posn? Scales a-posn’s x coordinate by scale-factor.Example:
> (posn-scale-x 3 (posn 1 2)) '#s(posn 3 2)
procedure
(posn-scale-y scale-factor a-posn) → posn?
scale-factor : real? a-posn : posn? Scales a-posn’s y coordinate by scale-factor.Example:
> (posn-scale-y 3 (posn 1 2)) '#s(posn 1 6)
procedure
(posn-scale-each scale-factor posns) → (listof posn?)
scale-factor : real? posns : (listof posn?) Example:
> (posn-scale-each 3 (list (posn 1 2) (posn 4 5) (posn 7 8))) '(#s(posn 3 6) #s(posn 12 15) #s(posn 21 24))
procedure
(posn-scale-x-each scale-factor posns) → (listof posn?)
scale-factor : real? posns : (listof posn?) Example:
> (posn-scale-x-each 3 (list (posn 1 2) (posn 4 5) (posn 7 8))) '(#s(posn 3 2) #s(posn 12 5) #s(posn 21 8))
procedure
(posn-scale-y-each scale-factor posns) → (listof posn?)
scale-factor : real? posns : (listof posn?) Example:
> (posn-scale-y-each 3 (list (posn 1 2) (posn 4 5) (posn 7 8))) '(#s(posn 1 6) #s(posn 4 15) #s(posn 7 24))
procedure
(posn-rotate-origin-ccw-90 a-posn) → posn?
a-posn : posn? Returns a-posn rotated ninety degrees counter clockwise around the origin.Example:
> (posn-rotate-origin-ccw-90 (posn 2 1)) '#s(posn -1 2)
procedure
(posn-rotate-origin-ccw-180 a-posn) → posn?
a-posn : posn? Returns a-posn rotated one hundred and eighty degrees counter clockwise around the origin.Example:
> (posn-rotate-origin-ccw-180 (posn 2 1)) '#s(posn -2 -1)
procedure
(posn-rotate-origin-ccw-270 a-posn) → posn?
a-posn : posn? Returns a-posn rotated two hundred and seventy degrees counter clockwise around the origin.Example:
> (posn-rotate-origin-ccw-270 (posn 2 1)) '#s(posn 1 -2)
procedure
(posn-rotate-origin-ccw degrees a-posn) → posn?
degrees : (between/c 0 360) a-posn : posn? Returns a-posn rotated degrees counter clockwise around the origin.Example:
> (posn-rotate-origin-ccw 70 (posn 1 1)) '#s(posn -0.5976724774602395 1.281712764111577)
procedure
(posn-rotate-ccw center-posn degrees a-posn) → posn?
center-posn : posn? degrees : (between/c 0 360) a-posn : posn? Returns a-posn rotated degrees counter clockwise around center-posn.Example:
> (posn-rotate-ccw (posn 20 20) 45 (posn 22 21)) '#s(posn 20.707106781186546 22.121320343559642)
procedure
(posn-transform-relative new-origin transform a-posn) → posn? new-origin : posn? transform : (-> posn? posn?) a-posn : posn? Given a transform that moves a posn? in a way that is relative to the origin, returns a new posn? that transforms a-posn with the transform relative to new-origin.Examples:
> (posn-rotate-origin-ccw-90 (posn 2 1)) '#s(posn -1 2)
> (posn-transform-relative (posn 20 20) posn-rotate-origin-ccw-90 (posn 22 21)) '#s(posn 19 22)