Voronoi diagram: Difference between revisions

Added solution for Red programming language
(added ocaml)
(Added solution for Red programming language)
Line 2,124:
(points3d pts3d #:sym 'fullcircle3)))
</lang>
 
=={{header|Red}}==
<lang red>
Red [needs: 'view]
 
canvas: 500x500
num-points: 50
diagram-l1: make image! canvas
diagram-l2: make image! canvas
 
distance: function [
"Find Taxicab (d1) and Euclidean (d2) distances between two points"
pt1 [pair!]
pt2 [pair!]
][
d1: (absolute (pt1/x - pt2/x)) + absolute (pt1/y - pt2/y)
d2: square-root ((pt1/x - pt2/x) ** 2 + ((pt1/y - pt2/y) ** 2))
reduce [d1 d2]
]
 
;-- Generate random origin points with respective region colors
points: collect [
random/seed now/time/precise
loop num-points [
keep as-pair random canvas/x random canvas/y
keep as-color random 255 random 255 random 255
]
]
 
;-- Color each pixel, based on region it belongs to
repeat y canvas/y [
repeat x canvas/x [
coord: as-pair x y
min-dist: distance 1x1 canvas
min-point-l1: min-point-l2: min-color-l1: min-color-l2: none
foreach [point color] points [
d: distance point coord
if d/1 < min-dist/1 [
min-point-l1: point min-dist/1: d/1 min-color-l1: color
]
if d/2 < min-dist/2 [
min-point-l2: point min-dist/2: d/2 min-color-l2: color
]
]
poke diagram-l1 coord min-color-l1
poke diagram-l2 coord min-color-l2
]
]
 
;-- Draw origin points for regions
foreach [point color] points [
draw diagram-l1 compose [circle (point) 1]
draw diagram-l2 compose [circle (point) 1]
]
 
;-- Put results on screen
view [
title "Voronoi Diagram"
image diagram-l1 image diagram-l2
]
</lang>
 
 
=={{header|Ring}}==
Anonymous user