Voronoi dual road networks with crossings

calendar_today

28.06.2022

label

Modeling, Environment

mouse

Houdini 19.0

1 Introduction

A barebone example for a dual voronoi network with shortest paths and curved crossings.

2 Crossings

First we identify crossings by the number of neighbour points.

``neighbourcount(0, i@ptnum)>2``

We set up an array `nbs[]` of neighbour points. In the first loop we calculate their angle in relation to their center to order the neighbour points counter-clockwise with `argsort` and `reorder`.

The second loop calculates intermediate points located halfway between a neighbour and the center point `(point(0, 'P', nb) + v@P) / 2.0`. The third loop connects consecutive neighbour points along with one intermediate point to a curve.

``````int nbs[] = neighbours(0, i@ptnum);

float angle[];
foreach(int nb; nbs){
vector pos = point(0, 'P', nb) - v@P;
float a = atan(pos.x, pos.z);
append(angle, a);
}

int indices[] = argsort(angle);
nbs = reorder(nbs, indices);

int pts[];
foreach(int nb; nbs){
vector pos_pt = (point(0, 'P', nb) + v@P) / 2.0;