X-Git-Url: https://git.jsancho.org/?p=dungeon-master.git;a=blobdiff_plain;f=modules%2Fdungeon-master%2Fgeom%2Fpoint.scm;fp=modules%2Fdungeon-master%2Fgeom%2Fpoint.scm;h=72ca1bbe00ae662ae9d97ba448c721424bb745c9;hp=0000000000000000000000000000000000000000;hb=8f36ecdca1766ddd2a177fa46dc885c7f8e14130;hpb=4fce641cc077d18f972e250d2fe3be5067618127 diff --git a/modules/dungeon-master/geom/point.scm b/modules/dungeon-master/geom/point.scm new file mode 100644 index 0000000..72ca1bb --- /dev/null +++ b/modules/dungeon-master/geom/point.scm @@ -0,0 +1,53 @@ +;;; Dungeon Master --- RPG Adventure Generator +;;; Copyright © 2019 Javier Sancho +;;; +;;; Dungeon Master is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; Dungeon Master is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with Dungeon Master. If not, see . + + +(define-module (dungeon-master geom point) + #:use-module (srfi srfi-9) + #:export (make-point + point? + point-x + point-y + points-distance + sum-points + scale-point)) + +(define-record-type + (make-point x y) + point? + (x point-x) + (y point-y)) + +(define (points-distance p1 p2) + (abs + (sqrt (+ (expt (- (point-x p1) (point-x p2)) 2) + (expt (- (point-y p1) (point-y p2)) 2))))) + +(define (sum-points . points-to-sum) + (let loop ((points points-to-sum) + (x 0) + (y 0)) + (cond ((null? points) + (make-point x y)) + (else + (loop (cdr points) + (+ x (point-x (car points))) + (+ y (point-y (car points)))))))) + +(define (scale-point point scale) + (make-point + (* (point-x point) scale) + (* (point-y point) scale)))