(#%require (only racket/base error))
(define (create-vector x y)
(define (sum vec2) ;optelling 2 vectoren => vector terug
(create-vector (+ x (vec2 'get-x))
(+ y (vec2 'get-y))))
(define (difference vec2) ;aftrekking 2 vectoren => vector terug
(create-vector (- x (vec2 'get-x))
(- y (vec2 'get-y))))
(define (dotproduct vec2) ;inwendig product 2 vectoren => getal terug
(+ (* x (vec2 'get-x))
(* y (vec2 'get-y))))
(define (multiply num) ;product vector met getal => vector terug
(create-vector (* x num)
(* y num)))
(define (divide num) ;deling vector met getal => vector terug
(create-vector (/ x num)
(/ y num)))
(define (normalvector vec2)
(create-vector (- (vec2 'get-x) x)
(- (vec2 'get-y) y)))
(define (dispatch msg)
(case msg
((set-x!) (lambda (new-x) (set! x new-x)))
((set-y!) (lambda (new-y) (set! y new-y)))
((get-x) x)
((get-y) y)
((sum) sum)
((difference) difference)
((dotproduct) dotproduct)
((normalvector) normalvector)
((multiply) multiply)
((divide) divide)
(else (error "unknown message " msg))))
dispatch)