get.dist = function(x) { sqrt(x[1]^2 + x[2]^2) } get.pairs = function(N) { M = matrix(0, nrow = N * (N - 1)/2, ncol = 2) x = 1:N k = 1 for (i in head(x, -1)) { for (j in (i + 1):(length(x))) { M[k, ] = c(i, j) k = k +1 } } M } create.graph = function(N = 100, d = 0.3) { rnd.points = matrix(runif(2 * N), ncol = 2) perms = get.pairs(N) Edges = apply(perms, 1, FUN = function(x){ vec.diff = rnd.points[x[1], ] - rnd.points[x[2], ] get.dist(vec.diff) }) res = cbind(Edges, perms) colnames(res) = c('E', 'V1', 'V2') list(M = res, N = N, d = d, pts = rnd.points) } plot.graph = function(graph.obj) { N = graph.obj$N d = graph.obj$d M = graph.obj$M rnd.points = graph.obj$pts caption = paste('G(N, d) : (', N, ', ', d, ')', sep = '') plot(rnd.points, type = 'p', pch = 21, bg = 'red', main = caption, cex = 1.5) for (r in 1:nrow(M)) { if (M[r, 1] <= d) { v1 = M[r, 2] v2 = M[r, 3] arrows(rnd.points[v1, 1], rnd.points[v1, 2], rnd.points[v2, 1], rnd.points[v2, 2], angle = 0) } } } draw.graph = function(N = 100, d = 0.3) { g = create.graph(N, d) plot.graph(g) }