Radial sort in line

Radial sort in line

HTML

Radial sort in line
<div id="draw"></div>
<div class="link">* <a href="http://www.scriptspot.com/forums/3ds-max/scripts-wanted/radial-sort-in-line">Scriptspot</a></div>

CSS

body{text-align:center;font-size:19px; padding:12px;}
a {font-size:9px; color:#000;text-decoration:none;}
.link {font-size:9px;}

JavaScript

var dist2p = function(p1, p2){
    var a = p1.x, b = p1.y, c = p2.x, d = p2.y;
    with (Math) {
        return sqrt(abs((d - b) * (d - b) + (c - a) * (c - a)));
    }
}
//implicit equation of the line
function ccnmplct(a, b){
    //a,b    vector direccion b1-a1 , b2-a2
    var v1m = b.x - a.x;
    var v1n = b.y - a.y;
    var c1x = v1m;
    var c1y = v1n;
    result = [v1n, -v1m, (a.y * v1m) - (v1n * a.x)]
    return result
}

function hemisphere(a, b, c){
    //a, fist point line
    //b, last point line
    //c point    
    var abc = ccnmplct(a, b);
    var v1a = abc[0] * c.x + abc[1] * c.y + abc[2]
    var side = 0
    if (v1a > 0) {
        side = 1
    }
    if (v1a < 0) {
        side = -1
    }
    if (v1a == 0) {
        side = 0
    }
    return side
}

function order(a, b){
    return a.dist - b.dist;
}

function extract(obj, key, val){
    var s = []
    for (var i = 0; i < obj.length; i++) {
        if (obj[i][key] == val) {
            s.push(obj[i])
        }
    }
    return s
}

//////////////////
//////////////////

var canvas = Raphael('draw', 602, 302);

var x = 10, y = 10, r = 1
var num = 200
var radius = 100
var med = {
    x: 600 / 3 - 1,
    y: 300 / 2 + 1
}
var arr = []
var angle = Math.PI * 2 / num
//canvas.circle(med.x,med.y,radius).attr({stroke: 'black', 'stroke-width': 1});

for (var a = 0; a < num; a++) {
    var rand = Math.random() * 360
    x = med.x + radius * Math.sin(rand * angle)
    y = med.y + radius * Math.cos(rand * angle)
    arr.push({
        x: x,
        y: y
    })
}

for (var a = 0; a < num; a++) {
    canvas.circle(arr[a].x, arr[a].y, r).attr({
        stroke: 'black',
        'stroke-width': 1
    });
    if (a > 0) {
        canvas.path('M' + arr[a - 1].x + ',' + arr[a - 1].y + ' ' + arr[a].x + ',' + arr[a].y).attr({
            stroke: 'black',
            'stroke-width': 1
        });
    }
}
/////////////////////

var x = 10, y = 10, r = 1

var radius = 100
var med = {
    x: 600 * 2 / 3 + 1,
    y: 300 / 2 +...