線分のデータ構造を定義してやります。構成するやつと分解するやつ。
(define (make-segment start end) (cons start end)) (define (start-segment segment) (car segment)) (define (end-segment segment) (cdr segment))
線分は点で定義されるんで、点も定義してやるよ!
(define (make-point x y) (cons x y)) (define (x-point point) (car point)) (define (y-point point) (cdr point))
あと点は出力できるようにする。
(define (print-point point) (newline) (display "(") (display (x-point point)) (display ",") (display (y-point point)) (display ")"))
で、中点の座標を計算する関数かいた。
(define (midpoint-segment segment) (make-point (/ (+ (x-point (start-segment segment)) (x-point (end-segment segment))) 2.0) (/ (+ (y-point (start-segment segment)) (y-point (end-segment segment))) 2.0)))
こいつらは、こんな感じでうごきます。
gosh> (define line (make-segment (make-point 3 5) (make-point 4 8))) line gosh> (print-point (midpoint-segment line)) (3.5,6.5)#<undef>