0

Supposons que nous ayons une carte de hauteur représentant l'élévation du terrain sous la forme d'une image où chaque pixel indique la hauteur. Supposons qu'une autre couche sur cette même image soit utilisée pour indiquer le chemin d'une route à travers le terrain, donc un pixel brillant indique un point sur la route, un pixel foncé indique la route, et les pixels intermédiaires représentent les endroits qui sont le long du bord de la route. Cela semble être une façon naturelle de représenter une route dans cette situation, mais nous pourrions aussi la convertir en un contour polygonal de la route en utilisant Marching Squares.Nivellement d'une route dans une carte de hauteur de terrain

La question est: comment un algorithme peut-il ajuster la carte de hauteur pour maintenir la route horizontale d'un côté à l'autre. Il serait facile de rendre la route entièrement horizontale en faisant la moyenne des altitudes de chaque point de la route, mais ce n'est pas ainsi que les routes fonctionnent. Une route devrait être capable de monter et descendre des collines, mais ne pas obliquer vers la gauche ou la droite.

Il doit y avoir une solution géométrique pour trouver l'angle de la route et interpoler linéairement les hauteurs entre les pixels. Ou y at-il une solution plus délicate qui donne de bons résultats dans la pratique sans y travailler si fort?

Répondre

0

Vous pouvez calculer des normales horizontales sur la route à chaque point et des points de hauteur moyens le long de ces normales. Cela vous aidera à garder les normales horizontales - et c'est ainsi que se comportent les routes.

+0

Est-ce que "chaque point" signifie le centre de chaque pixel?La normale à travers le centre d'un pixel ne passerait-elle pas rarement par le centre de plus d'un pixel? Si nous comptons les pixels qui sont simplement touchés par la normale, alors beaucoup de pixels seraient touchés par de nombreuses normales, alors quelle normale utilisons-nous pour calculer la moyenne pour chaque pixel? – Geo

+0

Peut-être essayer une sorte de moyenne pondérée si le pixel est touché par plusieurs normales ... –

0

Utilisez la hauteur des pixels le long de l'axe de la route et réglez cette hauteur sur la carte de hauteur le long de la normale à l'axe. C'est techniquement un peu compliqué. Ce que vous pouvez faire est de mailler la route en minuscules quadrilatères, et "remplir" les quadrilatères avec des hauteurs interpolées constantes ou bilinéairement.

Pour un meilleur réalisme, il faut creuser un peu le relief du côté ascendant et remplir le côté descendant pour éviter les parois verticales et respecter les pentes du remblai. Cela peut être fait en étendant le maillage à l'extérieur de la route avec des quadrilatères supplémentaires auxquels vous donnez une pente.

0

Si la route est définie avec des données vectorielles (lignes), la solution au problème serait plus claire. Comme l'écrivait Yves, les hauteurs utilisées pour remplir la route sont les hauteurs sur l'axe de la route (axe), et les valeurs sont propagées perpendiculairement à l'axe, pour la moitié de la largeur de la route des deux côtés. C'est aussi assez compliqué à calculer. Le problème principal est avec des coudes (angles) sur la ligne d'axe. C'est parce que les côtés et l'axe ont des longueurs différentes dans les virages et il faut prendre soin de voyager en parallèle sur ces trois lignes.

Le problème rastérisé peut être résolu en recherchant des pixels perpendiculaires à un point sur l'axe. Il est possible d'utiliser une approche qui trouve un ensemble de pixels avec une propriété similaire. Comme prendre un pixel côté route et trouver le plus court chemin de pixel vers l'autre côté de la route produit une ligne de pixels qui sont (probablement) perpendiculaires à l'axe. Les pixels sur la ligne de chemin la plus courte peuvent utiliser la même hauteur, la même valeur de pixel moyen ou même la valeur moyenne. Avec ce type d'approche, le même problème de courbure se produira puisque les pixels du côté de la route intérieure peuvent avoir des pixels plus proches du côté de la route extérieure. Peut-être que plus de moyenne peut aider ici. J'irais avec l'approche pour trouver le chemin le plus court de chaque pixel des deux côtés. Pour chaque ligne la plus courte, trouvez la valeur de hauteur à utiliser. Avec ce pixel sera sur les lignes les plus courtes, et il peut utiliser la valeur moyenne des lignes les plus courtes, il est sur. Si un pixel n'est pas couvert par la ligne la plus courte, utilisez la valeur moyenne des pixels voisins. Je pense que les nœuds de graphes utilisés pour trouver les chemins les plus courts (construits à partir de pixels) ont 8 voisins, et les bords doivent être pondérés, où les bords horizontaux/verticaux ont un poids 1 et les bords diagonaux ont un poids sqrt (2).