Suite

Commandez une liste de points pour créer un polygone avec une bordure extérieure lisse

Commandez une liste de points pour créer un polygone avec une bordure extérieure lisse


J'ai une fonction qui extrait des latitudes/longueurs d'une base de données, puis je mets ces valeurs dans un polygone pour voir sa forme. Le problème est qu'ils sont si aléatoires en position et en direction les uns des autres que j'obtiens une tonne de formes triangulaires en raison du chevauchement. Existe-t-il un moyen d'ordonner les positions afin d'obtenir un polygone solide sans les trous qui se chevauchent ? A tenté:

Dim OrderPoints = points.OrderBy(Function(ll) ll.Lng).ThenBy(Function(ll) ll.Lat).ToList

Je pense qu'il doit être dessiné dans un motif circulaire, en trouvant le plus loin lorsqu'il se déplace dans une direction donnée. En espérant ne pas avoir à réinventer la roue si possible ici. S'il y a un nom pour ce processus, je serais plus qu'heureux de le rechercher une fois que je saurais comment il s'appelle.

ÉDITER: J'ai trouvé ça pour Enveloppe convexe. Fait ce code jusqu'à présent. Je ne sais pas comment procéder à partir d'ici.

Classe publique ConvexHull Fonction publique ccw(a As PointLatLng, b As PointLatLng, c As PointLatLng) As Integer Dim area2 = (b.Lat - a.Lat) * (c.Lng - a.Lng) - (b.Lng - a .Lng) * (c.Lat - a.Lat) If (area2 < 0) Then Return -1 If (area2 > 0) Then Return +1 Return area2 ' fondamentalement colinéaire End Function Fonction publique colinéaire (a As PointLatLng, b As PointLatLng, c As PointLatLng) As Boolean Return ccw(a, b, c) = 0 End Function End Class

Le problème général ici, connu sous le nom polygonisation dans la littérature, est assez difficile. Voir, par exemple, cette page Web.

Le problème avec l'enveloppe convexe est que la région délimitée par vos points peut ne pas être convexe. Et en fait, vous pourriez perdre la plupart des détails :



Ci-dessus, l'enveloppe convexe des points encerclés est le triangle à contour bleu, mais vous préféreriez peut-être le polygone bleu clair plus nuancé à l'intérieur.

Une idée qui fonctionnerait ici et dans d'autres situations restreintes consiste à calculer le centroïde de vos points, puis à les connecter dans l'ordre angulaire autour du centroïde.


Comment ajouter 'border' au diagramme de Voronoi

Supposons que j'ai un ensemble de points pts , à partir duquel je génère un diagramme de Voronoï VD :

Maintenant, selon la transformation géométrique faite avec Voronoiesh[] , nous pouvons observer que l'aire des cellules "extérieures" se projette indéfiniment jusqu'à ce que leurs bords coupent une autre cellule, donc leur aire est beaucoup plus grande que celle des cellules "intérieures" .

Ma question est la suivante : comment pourrais-je « lier » le diagramme de Voronoï de sorte que les cellules extérieures aient à peu près la même surface que les cellules intérieures ?

Je pense qu'une solution possible nécessiterait de générer un "masque" qui délimite la région couverte par pts , puis d'exclure la zone en dehors de ce masque. Je pensais générer un masque tel que la fusion de cercles centrés en chaque point, avec un rayon produisant à peu près la même surface que les points intérieurs.

Une deuxième solution à laquelle j'ai pensé consiste à générer un excès de points ptsOuter , qui couvrent une zone extérieure à la zone à l'intérieur des pts , à peu près également espacées que les pts . Ensuite, faites le maillage de Voronoi sur le plateau , ce qui, je pense, limiterait les points en pts en utilisant les points en ptsOuter .

Je me demande s'il existe un moyen plus simple ou plus efficace que ces idées que j'ai actuellement.

Éditer: Par "frontière", j'entends une limite qui suit la distribution des points en pts , imaginez quelque chose comme ça à la fin (la bordure dessinée ici, ce qui exclurait la zone à l'extérieur):


4 réponses 4

  1. Il y a toujours une seule zone ouverte, représentée par un polygone. Tous les autres domaines sont sans importance.
  2. Une ligne commence lorsque vous vous déplacez du périmètre du polygone à l'intérieur du polygone.
  3. Une ligne s'arrête lorsque vous vous déplacez de l'intérieur du polygone vers le périmètre.
  4. Lorsque vous arrêtez la ligne, vous avez divisé le polygone en deux polygones.
  5. Vous décidez ensuite lequel des deux polygones remplir et lequel conserver comme zone ouverte. Dans Qix, le côté où se trouvait le Qix (ennemi) restait ouvert et l'autre côté était rempli.

Comment subdiviser le polygone ? Vous utilisez les extrémités de votre ligne pour diviser le périmètre du polygone en deux sections, puis utilisez la nouvelle ligne pour compléter ces deux sections en nouveaux polygones.

Par exemple, disons que votre zone ouverte est un polygone avec des points [p0, p1, p2, p3, p4, p5] . Votre point de départ A se situe entre p1 et p2 , et votre point final B se situe entre p3 et p4 . La nouvelle ligne tracée est [A, s, t, u, v, B] . Nous avons d'abord divisé le polygone en deux segments [A, p2, p3, B] et [B, p4, p5, p0, p1, A] . Ces deux segments forment ensemble le polygone d'origine. Ensuite, nous collons la nouvelle ligne dans chacun (une fois en avant, une fois en arrière), formant [A, p2, p3, B, v, u, t, s] et [B, p4, p5, p0, p1, A, s, t, u, v] . Vous remplissez l'un de ces polygones et gardez l'autre comme nouvelle zone ouverte.

Je n'ai pas implémenté cela et je ne sais pas avec certitude si cela fonctionnera, mais c'est l'approche que j'utiliserais: subdivision de polygone au lieu de remplissage de polygone.

Il s'agit d'un problème impliquant plusieurs sous-étapes discrètes. Voici un aperçu de ce que je suggérerais :

  • Attendez que le joueur forme une intersection de plusieurs lignes
  • Obtenez un pixel de chaque côté de l'intersection
  • Pathfind pour voir s'ils peuvent se connecter les uns aux autres
  • Les pixels qui ne peuvent pas se connecter sont des zones distinctes
  • Effectuez un remplissage pour obtenir tous les pixels de la zone

Je stockerais l'état des pixels du jeu dans un tableau Numpy (numpy dot scipy dot org). La couleur pourrait être trois tableaux distincts pour RVB, mais le tableau sur lequel je vais me concentrer est le tableau ligne/pas de ligne. Initialisez-le simplement avec des zéros et définissez-le à la taille de votre terrain de jeu, et chaque fois que le joueur passe à travers un pixel, définissez l'élément correspondant dans le tableau sur 1. Vous voudrez les afficher à l'écran sous une couleur différente. , car ils sont votre ligne !

Chaque fois que le pixel du joueur bouge, je vérifie s'il passe (et dessine une ligne à côté) d'une ligne existante. Si c'est le cas, j'obtiendrais un pixel de chaque division possible :

Les points sont des pixels vides, les lignes sont (évidemment) des lignes et les X sont les pixels vides que nous voulons sélectionner. Nous pouvons le faire de la manière suivante :


Modèle de données vectorielles et son application

Le modèle de données vectorielles représente des caractéristiques géographiques de la même manière que les cartes. Les points représentent des entités géographiques trop petites pour être représentées sous forme de lignes ou de zones les lignes représentent des entités géographiques trop étroites pour être représentées car les zones et les zones représentent des entités géographiques homogènes. Un système de coordonnées x, y (cartésien) fait référence à des emplacements réels.

Dans un modèle de données vectorielles, chaque emplacement est enregistré sous la forme d'une seule coordonnée x, y. Les points sont enregistrés comme une seule coordonnée. Les lignes sont enregistrées sous la forme d'une série de coordonnées x, y ordonnées. Les zones sont enregistrées sous la forme d'une série de coordonnées x, y définissant des segments de ligne qui entourent une zone, d'où le terme polygone, signifiant « figure à plusieurs côtés ». (ESRI, 1998)

6.2 Structure du modèle de données vectorielles

Le modèle de données vectorielles se compose de trois types d'objets géométriques : point, ligne et surface. Un point peut représenter une gravière, une ligne peut représenter un ruisseau et une zone peut représenter une zone végétalisée. Le quatrième type de données spatiales, les surfaces 3D continues, est généralement représentée sous forme de données raster, bien qu'elles soient souvent représentées par des courbes de niveau.

Un point a 0 dimension. Une entité ponctuelle occupe un emplacement et est distincte des autres entités. Une ligne est unidimensionnelle et a la propriété de longueur. Une entité linéaire est constituée de points : un point de départ, un point de fin et une série de points marquant la forme de la ligne, qui peut être une courbe lisse ou une connexion de segments de ligne droite. Les courbes lisses sont généralement générées ou ajustées par des équations mathématiques, telles que des équations polynomiales cubiques. Les segments de ligne droite peuvent représenter des caractéristiques artificielles ou des approximations de courbes lors de la saisie de données. Les points qui marquent la forme d'une entité linéaire mais ne sont pas des nœuds sont appelés sommets. Les entités linéaires peuvent se croiser ou se joindre à d'autres lignes et former un réseau.

Une aire est bidimensionnelle et possède les propriétés d'aire et de frontière. La limite d'une entité surfacique sépare la zone intérieure de la zone extérieure. Les entités de zone peuvent être isolées ou connectées. Une caractéristique de zone isolée a généralement un nœud servant à la fois de nœud de début et de fin. Les caractéristiques de la zone peuvent être entourées par d'autres zones et y former des trous, comme les réserves indiennes entourées par l'État de l'Idaho. Les entités surfaciques peuvent se chevaucher et créer des zones superposées. Par exemple, les zones brûlées lors d'incendies de forêt antérieurs peuvent se chevaucher.

La représentation des données vectorielles à l'aide de points, de lignes, de surfaces et de volumes n'est pas toujours simple car elle peut dépendre de l'échelle de la carte et, parfois, des critères établis par les agences de cartographie gouvernementales. Une ville sur une carte à l'échelle 1:1 000 000 est représentée par un point, mais la même ville est représentée comme une zone sur une carte à l'échelle 1:24 000.

Un cours d'eau est représenté par une seule ligne près de son cours supérieur, mais comme une zone le long de son cours inférieur. Dans ce cas, la largeur du ruisseau détermine comment il doit être représenté sur une carte. L'US Geological Survey (USGS) utilise des lignes simples pour représenter les cours d'eau de moins de 40 pieds de large sur des cartes topographiques à l'échelle 1:24 000 et des lignes doubles pour les cours d'eau plus importants. Lorsque l'hydrographie devient une couche dans les données du graphique linéaire numérique (DLG), les cours d'eau en lignes simples sont numérisés en tant que lignes et les cours d'eau en lignes doubles sont numérisés en tant que zones. Par conséquent, un ruisseau peut apparaître comme une ligne ou une zone selon sa largeur et le critère utilisé par l'agence gouvernementale. (http://geolibrary.uidaho.edu/courses/geog385/Lectures/1/)

La topologie définit explicitement les relations spatiales. Le principe en pratique est assez simple les relations spatiales sont exprimées sous forme de listes (par exemple, un polygone est défini par la liste des arcs qui composent sa frontière).

La création et le stockage de relations topologiques présentent un certain nombre d'avantages. Les données sont stockées efficacement, de sorte que les grands ensembles de données peuvent être traités rapidement. La topologie facilite les fonctions analytiques, telles que la modélisation du flux à travers les lignes de connexion dans un réseau, la combinaison de polygones adjacents avec des caractéristiques similaires, l'identification des entités adjacentes et la superposition d'entités géographiques.

La topologie exprime explicitement les relations spatiales entre les objets géométriques. Le modèle de données vectorielles dans ARC/INFO prend en charge trois concepts topologiques de base :

Connectivité : les arcs se connectent les uns aux autres au niveau des nœuds
Définition de zone : une zone est définie par une série d'arcs connectés
Contiguïté : les arcs ont des directions et des polygones gauche et droit

Tous les fichiers de données SIG ne sont pas structurés topologiquement. Le format de données spatiales standard utilisé dans ArcView est appelé fichiers de formes, qui ne sont pas topologiques. Les fichiers de formes définissent la géométrie et les attributs des entités cartographiques dans trois fichiers de base. le .shp fichier stocke la géométrie de l'entité, le .shx fichier conserve l'index de la géométrie de l'entité et le fichier .dbf fichier stocke les attributs des entités cartographiques. Selon l'application, ArcView peut créer et utiliser d'autres fichiers. Par exemple, l'analyse de réseau nécessite l'utilisation d'un répertoire d'index de réseau.

Bien que le fichier de géométrie d'entité dans ArcView enregistre un point sous forme de paire de coordonnées X, Y, une ligne sous forme de série de points et un polygone sous forme de série de lignes, aucun fichier ne décrit la relation spatiale entre les objets géométriques. Pour les polygones, la structure de données du fichier de formes viole en fait la topologie des polygones simples en permettant aux polygones du fichier de formes d'avoir des arcs en double et de se chevaucher.

Sans topologie, les fichiers de formes peuvent créer des problèmes dans certaines analyses SIG, telles que la superposition de cartes basées sur la topologie et l'analyse de réseau. L'utilisation de fichiers de formes, cependant, a deux avantages principaux (1) ils s'affichent plus rapidement sur une vue que les couvertures ARC/INFO, et (2) ils ne sont pas propriétaires et peuvent être utilisés directement dans d'autres progiciels SIG tels que MapInfo et GeoMedia.

Les fichiers de formes peuvent être convertis en couvertures ARC/INFO, et vice versa. La conversion d'un fichier de formes en une couverture nécessite la construction de relations topologiques et la suppression des arcs en double. La conversion d'une couverture en fichier de formes est plus simple. Mais si une couverture comporte des erreurs topologiques, telles que des lignes qui ne sont pas parfaitement jointes, ces erreurs peuvent entraîner des problèmes d'entités manquantes dans le fichier de formes. (http://geolibrary.uidaho.edu/courses/geog385/Lectures/1/)

Les capacités topologiques vectorielles du logiciel SIG peuvent être divisées en deux groupes

1. Topographie stockée (traditionnelle)

Des considérations d'espace disque pour la topologie stockée sont nécessaires

La topologie est construite lorsque de nouvelles données sont ajoutées

Les erreurs sont détectées et nettoyées avant l'analyse

Connaissances requises pour maintenir l’ensemble de données

2. Topographie dynamique (non traditionnelle)

La topologie est construite à la volée et non stockée

Considérations relatives à l'espace disque pour la topologie stockée minimale

La topologie est créée pendant l'utilisation/l'analyse

La dose de données ne devient pas obsolète

Les erreurs ne sont pas nécessairement détectées avant l'analyse

Moins de compétences requises pour maintenir l'ensemble de données

(Geo Asia pacific août/septembre 1999 : Michelle Legault, GIS Analyst Research Center, University of Science and Technology, Clearwater Bay, Kowloon, Hong Kong)

Connectivité

La connectivité permet d'identifier un itinéraire jusqu'à l'aéroport ou de relier des ruisseaux aux rivières ou de suivre un chemin de la station d'épuration à une maison. Voici comment cela fonctionne.

Rappelez-vous la structure de données arc-noeud. Un arc est défini par deux extrémités, le nœud de départ indiquant où commence l'arc et un nœud de destination indiquant où il se termine. C'est ce qu'on appelle la topologie arc-nœud.

La topologie de nœud d'arc est prise en charge via une liste de nœuds d'arc. La liste identifie les nœuds de départ et de destination pour chaque arc. Les arcs connectés sont déterminés en recherchant dans la liste des numéros de nœuds communs. Dans l'exemple suivant, il est possible de déterminer que les arcs 1, 2 et 3 se coupent tous car ils partagent le nœud 11. L'ordinateur peut déterminer qu'il est possible de parcourir l'arc 1 et de tourner sur l'arc 3 car ils partagent un nœud commun (11), mais il n'est pas possible de passer directement de l'arc 1 à l'arc 5 car ils ne partagent aucun nœud commun. (ESRI, 1998)

Contiguïté

Deux entités géographiques, qui partagent une frontière, sont appelées adjacentes. La contiguïté est le concept topologique, qui permet au modèle de données vectorielles de déterminer la contiguïté.

Rappelez-vous que le nœud de départ et le nœud de destination définissent un arc. Cela indique la direction d'un arc, de sorte que les polygones sur ses côtés gauche et droit peuvent être déterminés. La topologie gauche-droite fait référence aux polygones sur les côtés gauche et droit d'un arc. Dans l'illustration ci-dessous, le polygone B est à gauche de l'arc 6 et le polygone C est à droite. Ainsi, on peut savoir que les polygones B et C sont adjacents.

Notez que l'étiquette du polygone A est à l'extérieur de la limite de la zone. Ce polygone est appelé polygone externe ou univers et représente le monde en dehors de la zone d'étude. Le polygone de l'univers garantit que chaque arc a toujours un côté gauche et un côté droit définis. (ESRI, 1998)

Définition de la zone

Bon nombre des caractéristiques géographiques que l'on souhaite représenter couvrent une zone distincte à la surface de la terre, comme des lacs, des parcelles de terre et des secteurs de recensement. Une zone est représentée dans le modèle vectoriel par une ou plusieurs limites définissant un polygone. Bien que cela semble contre-intuitif, considérons un lac avec une île au milieu. Le lac a en fait deux limites, celle qui définit son bord extérieur et l'île, qui définit son bord intérieur. Dans la terminologie du modèle vectoriel, une île définit une limite intérieure (ou un trou) d'un polygone. Voici comment la topologie est utilisée pour définir les zones.

Rappelez-vous que la structure arc-noeud représente les polygones comme une liste ordonnée d'arcs plutôt qu'une boucle fermée de coordonnées x, y. C'est ce qu'on appelle la topologie polygone-arc. Dans l'illustration ci-dessous, le polygone F est composé des arcs 8, 9, 10 et 7 (le 0 avant le 7 indique que cet arc crée une île dans le polygone).

Chaque arc apparaît dans deux polygones (dans l'illustration ci-dessous, l'arc 6 apparaît dans la liste des polygones B et C). Étant donné que le polygone est simplement la liste des arcs définissant sa limite, les coordonnées de l'arc ne sont stockées qu'une seule fois, réduisant ainsi la quantité de données et garantissant que les limites des polygones adjacents ne se chevauchent pas. (ESRI, 1998)

6.3 Particularité du modèle de données vectorielles

L'opération de superposition examine deux jeux de données pour déterminer quelles entités géographiques existent au même emplacement.

Région

Les régions prennent en charge la modélisation de relations complexes entre des entités géographiques représentées sous forme de polygones. Alors que le bloc de construction d'un polygone est l'arc, le bloc de construction d'une région est le polygone. Par conséquent, une région est représentée comme un ensemble de polygones.

L'une des prémisses de base de la représentation d'objets géographiques sous forme de polygones est que les polygones ne se chevauchent pas et couvrent complètement la zone représentée. Cette contrainte est supprimée pour les régions. Dans une région, les polygones représentant des entités géographiques peuvent être autonomes, ils peuvent se chevaucher et ils n'ont pas besoin d'épuiser la superficie totale. Par exemple, une région de dommages causés par un incendie de forêt est représentée par des polygones indiquant la zone et le moment des dommages.

Une autre prémisse des polygones est que chaque entité géographique est représentée par un polygone. Ceci est étendu aux régions, de sorte qu'une seule entité géographique peut être représentée par plusieurs polygones. Par exemple, les îles composant l'État d'Hawaï sont une région composée de plusieurs polygones.

Comme pour les points, les lignes et les polygones, chaque région se voit attribuer un identifiant unique. Comme pour les polygones, la superficie et le périmètre sont conservés pour chaque région.

La construction de régions avec des polygones est similaire à la construction de polygones à partir d'arcs. Alors qu'un polygone est une liste d'arcs, une région est simplement une liste de polygones. Une distinction importante existe : l'ordre des polygones n'est pas significatif.

La construction de régions qui se chevauchent est également similaire à la construction de polygones. Alors que les polygones partagent un arc où ils se rencontrent, les régions partagent un polygone où elles se chevauchent.

Les régions améliorent considérablement la gestion des données car elles intègrent de nombreux types d'entités géographiques dans une seule vue tout en conservant les caractéristiques des entités géographiques d'origine. La gestion des relations entre les entités géographiques au sein du modèle de données est particulièrement utile lors de l'exécution d'analyses complexes. (ESRI, 1998)

En général, un réseau est un système de caractéristiques linéaires interconnectées à travers lesquelles les ressources sont transportées ou la communication est établie. Le modèle de données NETWORK est une représentation abstraite des composants et des caractéristiques des systèmes de réseau du monde réel. Le modèle se compose de liens de réseau, de nœuds de réseau, d'arrêts, de centres et de virages. La clé pour produire des modèles de réseau réussis réside dans la compréhension de la relation entre les caractéristiques des systèmes de réseau physiques et la représentation de ces caractéristiques par les éléments du modèle de réseau.

Network fournit des outils pour trouver des chemins - le chemin d'impédance le plus court ou minimum à travers un réseau. Les visites sont également incluses - une procédure heuristique pour ce qui est communément appelé le problème du voyageur de commerce, pour trouver le chemin le plus efficace vers une série d'emplacements. Les fonctions d'allocation attribuent des portions du réseau à un emplacement de fourniture de ressources. L'emplacement-allocation détermine les emplacements des sites et affecte la demande aux sites. (ESRI, 1998)

6.4 Applications du modèle de données vectorielles

Une étude de cas de modèle de données vectorielles : sélection de sites pour le cinéma en Khulna Ville comme centre de loisirs pour les personnes à faible revenu

Une ville peut être dotée d'un grand nombre d'industries, de quartiers résidentiels, d'établissements commerciaux, de centres commerciaux, etc. Mais il est en deçà de ses possibilités les plus élevées s'il n'a pas les qualités de vie qui représentent une vie plus fructueuse et plus heureuse pour son peuple. Les loisirs sont l'une de ces qualités d'une ville qui rendent la vie plus heureuse. Il n'y a rien dans le plan de la ville qui puisse contribuer de manière plus vitale à cette vie plus riche de la population que des dispositions appropriées pour les loisirs (Mahamud, 1999).

Dans la société, des possibilités de loisirs pour les personnes de tous âges et de tous les groupes sont nécessaires de toute urgence. Ce n'est que très récemment et dans une mesure très limitée que les gens ont commencé à comprendre les besoins récréatifs d'une manière scientifique. La planification est nécessaire pour fournir des installations récréatives de manière appropriée et dans un emplacement approprié.

En général, le groupe à faible revenu de la société est de plus en plus privé d'installations de loisirs car il ne peut pas se permettre de nombreuses installations de loisirs disponibles. Dans la ville de Khulna, les installations récréatives publiques sont très limitées. Même il y a une réelle pénurie d'espaces ouverts ou de parcs publics développés dans la ville de Khulna. Dans cette situation, le cinéma peut être une installation récréative bon marché pour le groupe à faible revenu de cette ville. Dans cette étude, la zone de service du cinéma existant de Khulna a été délimitée et le site pour le cinéma dans la zone non desservie a été découvert à travers certains critères. Cette étude montre l'application pratique des capacités du modèle de données vectorielles.

La localisation du cinéma est un enjeu important compte tenu de son utilisateur de service. Si un cinéma est situé dans un endroit étrange, les gens n'y iront pas et les ressources dépensées pour cela resteront inutilisées. Dans le cas de la ville de Khulna, il y a un groupe de cinémas près du CBD. À côté de la route BIDC près de Khalishpur, il y a deux cinémas à moins de 100 m. Ainsi, les gens à un endroit ont plus de choix pour regarder un film au cinéma car il y a plus d'un cinéma à une distance raisonnable. De l'emplacement du cinéma de la ville de Khulna (Carte 6.1 ), il semble qu'il puisse y avoir des endroits d'où la distance du cinéma le plus proche sera considérablement élevée.


6.4.2 Critères de sélection du site

La sélection du site ou l'analyse de l'emplacement approprié est une application très courante du SIG. Mais la plupart des cas, l'application de superposition et de tampon est populaire. Dans cette étude, la zone non desservie a d'abord été découverte grâce à l'analyse de l'allocation du réseau, puis les autres techniques d'analyse SIG sont appliquées avec la superposition et la mémoire tampon.

1. La zone doit être en dehors de la zone de service du cinéma existant

2. Le site doit se trouver dans une zone agricole, commerciale ou à usage mixte qui est à l'extérieur de la zone résidentielle

3. La zone doit se situer dans la résidence du groupe à faible et moyen revenu

4. La zone doit être à moins de 20 m de la route

5. La superficie doit être supérieure à 2 acres

Calcul de la superficie allouée

Le cinéma est un moyen de loisirs pour les pauvres et les classes moyennes, car ils ne peuvent pas se permettre d'autres loisirs coûteux à la maison. La demande de cinéma a été calculée à partir de données secondaires et d'enquêtes de terrain. Les emplacements d'où l'échantillon a été prélevé sont indiqués dans Carte 6.1.


Ajoutez bty="n" dans les deux commandes de tracé.

Pour les séries temporelles, ajoutez frame.plot=FALSE pour le même effet.

C'est simple à faire, il vous suffit d'inclure l'argument axes=FALSE . Considérer:

Notez que cela fonctionne aussi bien pour les histogrammes :

Avant d'appeler plot qui le réparera pour le zoo. Il peut également le corriger dans diverses situations où il n'est pas transmissible à la commande de traçage.

(Consultez l'option bty dans l'aide par () pour d'autres types de cadres pour le tracé)

Je réponds à la question plus générale de la suppression des bordures dans les parcelles, sans référence à Tufte.

Pour un histogramme, je n'ai pas trouvé que btn='n' se débarrasse de la bordure.

Une solution qui fonctionne pour les histogrammes et devrait fonctionner pour tous les types de tracés consiste à définir le type de ligne pour la bordure sur invisible : lty="blank"


5 réponses 5

Il s'agit d'un travail pour la fonction de masque rapide. Je vous permet de peindre sur la sélection elle-même comme si c'était l'image -

Ainsi, après avoir sélectionné la bordure elle-même avec la baguette magique comme vous l'avez fait ci-dessus, cliquez sur le petit bouton "caché" à gauche de la barre de défilement horizontale. Cela montre une représentation translucide teintée de rouge de votre sélection elle-même, et toute la peinture que vous faites l'affectera - c'est un dessin en niveaux de gris, donc le blanc complet (255) signifie "entièrement sélectionné" et le noir (0) signifie "non sélectionné" (bien que le la représentation sur cette vue est inversée : les zones sélectionnées sont affichées comme transparentes, non sélectionnées comme opaques). Ensuite, utilisez simplement l'outil de remplissage de seau pour remplir l'extérieur (ou l'intérieur) de votre sélection avec "Blanc" (ce qui rendra la teinte translucide transparente), revenez à l'édition normale en cliquant à nouveau sur le masque rapide - et vous êtes Fini.


4 réponses 4

La profondeur de couleur est le nombre de bits/octets utilisés pour afficher une couleur. Actuellement, vous utilisez une profondeur de 8 bits, ce qui vous donne 256 couleurs (0-255). Il s'agit d'une approche de couleur indexée, les différentes valeurs (de 0 à 255) sont palettes, ce qui signifie que chacune des 256 valeurs pointe vers une représentation de couleur stockée dans l'en-tête du document graphique sur lequel vous travaillez.

Il existe un certain nombre d'autres formats qui vous permettront de produire les bords lisses requis. Essayez de changer le format de votre image en une profondeur de 24 ou 32 bits.

Dans GIMP, vous pouvez le faire comme ça.

Vous devrez alors cocher la La plume option dans le Sélectionnez la bordure boite de dialogue.


3 réponses 3

S'il s'agit de formes, sélectionnez-les toutes, dupliquez-les, puis rassemblez-les en une seule forme.

La solution la plus rapide à laquelle je puisse penser pour tracer un chemin autour d'un groupe de formes consiste à utiliser l'outil de remplissage de seau. Dessinez d'abord une boîte colorée (pour contraindre le remplissage du seau) autour des formes, sélectionnez la boîte et zoomez sur la sélection.

Ensuite, sélectionnez l'outil de remplissage du seau et définissez son seuil sur 10 ou plus, de sorte que vous aurez un remplissage en douceur. (Réglez également le trait sur quelque chose de grand, disons 6 pixels et pas de remplissage pour que vous puissiez clairement voir le résultat). Cliquez avec l'outil de remplissage de seau entre votre boîte et le groupe de formes

Le remplissage du seau résultant aura également une bordure sur le bord de votre boîte colorée.

Supprimez simplement la forme extérieure en sélectionnant les nœuds de la forme extérieure avec l'outil de nœud, puis en les supprimant :

Vous pouvez maintenant déplacer la bordure vers l'arrière du groupe de formes, colorer le trait ou augmenter son épaisseur, ou lui donner un remplissage. Supprimez la boîte si vous le souhaitez.

S'il y a un bitmap inclus dans le groupe de formes, je tracerais d'abord un chemin avec un trait épais autour du bitmap pour avoir un bord lisse et uniformément coloré sur lequel tracer avant de remplir le seau.

Cela peut ne pas être très précis - notez qu'il y a quelques coins arrondis où ils devraient être nets. Cela peut être corrigé en utilisant l'outil de nœud. Si je veux une bordure plus précise, je ferais une opération d'union sur toutes les formes vectorielles, y compris la forme que j'ai placée autour d'un bitmap (je pourrais même agrandir la forme résultante en lui donnant un trait épais, en convertissant le trait en chemins, séparer le chemin et ne garder que la forme extérieure comme bordure).


4 réponses 4

L'outil stylo sera meilleur que de tracer chaque ligne individuellement.

Cependant, vous pouvez prendre vos chemins et les combiner en un seul chemin en les sélectionnant et en allant dans :

Objet → Chemin → Joindre ou alors Clic droit → Rejoindre

et ensuite vous pouvez contourner ce chemin en allant à:

Effet → Styliser → Coins arrondis

Alternativement, une fois les chemins combinés, vous pouvez sélectionner individuellement les points et ajuster les coins comme vous le souhaitez à l'aide de l'outil plume.

Ajoutez un point d'ancrage à l'un des segments de ligne, disons, le segment vertical, à une distance spécifique vue du point d'ancrage du coin (p1), puis utilisez l'outil de sélection directe (flèche blanche dans le panneau d'outils) pour déplacer l'original point d'angle à la même distance le long de l'autre segment de ligne.

Ensuite, choisissez l'outil Convertir le point d'ancrage (Maj-C) et cliquez sur le nouveau point afin de le convertir en un point d'ancrage de courbe - maintenez le bouton de la souris enfoncé pendant que vous faites glisser la poignée qui sortira du point. Faites glisser cette poignée vers le bas jusqu'à ce qu'elle soit au même niveau que l'autre ligne. Vous verrez comment la courbe se développe… (Gardez également la touche Maj enfoncée pendant que vous faites glisser, pour vous assurer que le glissement est parfaitement droit.)

(Les autres coins légèrement arrondis ont probablement été créés simplement en utilisant le bouton Joint rond et capuchons ronds dans le panneau Contour.)


2 réponses 2

Juste pour être clair, ce qui suit est basé sur l'expérimentation et pourrait être extrêmement trompeur.

Le schéma de l'algorithme de génération du maillage pour Plot3D et DensityPlot semble être :

  • Créer un maillage initial en fonction du nombre de points de tracé
  • Injecter tous les points fournis par l'utilisateur dans le maillage
  • Affiner le maillage

Il y a deux problèmes à régler lors de la fourniture d'une liste explicite de points à PlotPoints . La première est que l'injection d'un point dans le maillage initial fonctionne en subdivisant le triangle contenant, ce qui peut conduire à de très longs triangles fins dans le maillage. Le deuxième problème, critique, est que le le raffinement du maillage semble échouer si trop de points sont insérés dans un maillage initial grossier.

Pour illustrer ces problèmes, je vais définir une fonction pour afficher le maillage obtenu avec les paramètres PlotPoints et MaxRecursion spécifiés :

Pour commencer on peut regarder le maillage obtenu sans raffinement et avec un petit nombre de points de tracé. Il n'y a pas de surprises ici :

Lorsqu'un point supplémentaire explicite est fourni, le triangle contenant est subdivisé :

La question du triangle fin est claire, comparez par exemple le premier maillage ci-dessus avec une triangulation de Delaunay des mêmes points :

Si nous autorisons un raffinement du maillage avec MaxRecursion , nous pouvons voir que le point spécifié par l'utilisateur est échantillonné après le maillage initial pointe mais avant que le raffinement. J'ai surligné le point spécifié par l'utilisateur en rouge :

Je vais maintenant passer à une fonction de tracé plus intéressante pour rendre le raffinement plus évident. Voici les maillages avec notre point unique spécifié par l'utilisateur et le raffinement de maillage adaptatif activé :

Quelque chose d'intéressant s'est produit - les maillages avec 3 et 4 points de tracé initiaux ont été affinés, mais pas celui avec 2 points de tracé initiaux. (Clairement quelque chose a été fait, car le triangle mince a disparu - cela ressemble maintenant à la triangulation de Delaunay, mais il n'y a pas eu de subdivision.)

Cela devient encore plus intéressant si nous augmentons le nombre de points fournis par les utilisateurs :

Avec 10 points, le maillage avec 3 points de tracé initiaux est maintenant non affiné lui aussi. (Notez qu'il n'y a pas de seuil fixe, si vous exécutez le code plusieurs fois, vous verrez le maillage s'affiner parfois et parfois non.)

La tendance se poursuit si nous augmentons le nombre de points fournis par les utilisateurs :

C'est pourquoi les tracés de la question sortent mal - avec un grand nombre de points fournis par l'utilisateur et un maillage initial de Aucun (c'est-à-dire 2) points, il n'y a pas de raffinement adaptatif en cours et le tracé est basé sur un horrible maille avec beaucoup de triangles fins.

La seule solution que je peux voir est celle identifiée dans la question - utilisez un nombre suffisamment grand de points de tracé initiaux (ou automatique) pour que le raffinement du maillage démarre :

On ne sait pas pourquoi le raffinement du maillage échoue, je soupçonne que l'algorithme qui décide de subdiviser un triangle est trompé par les longs triangles minces qui apparaissent lorsque les points fournis par l'utilisateur sont insérés. Idéalement, il y aurait une re-triangulation complète du maillage après l'insertion des points supplémentaires, en utilisant quelque chose comme une triangulation de Delaunay, mais je ne trouve pas de moyen pour que cela se produise.

Comme MichaelE2 l'a souligné, ce n'est pas aussi clair que le raffinement du maillage récursif fonctionne ou ne fonctionne pas. Au lieu de cela, la règle semble être qu'avoir un point d'utilisateur dans tous La cellule carrée du maillage d'origine empêchera totalement le raffinement. However, when an original mesh cell is free of extra points, subdivision can occur in that cell - and propagate to adjacent cells. The propagation won't continue through the whole region though, rather it appears to spread by a few cells per recursion.

To demonstrate, here's a mesh with a single user-defined point (shown in blue) placed inside each square cell. There is no mesh refinement at all:

Now I'll remove the extra point from just one cell, in the middle. This time I'll highlight only the extra points added to the mesh by the refinement algorithm:

The refinement has started in the empty cell (the blue disk shows where the user point was removed) and spread to nearby cells. Here's an animation showing the result as MaxRecursion is increased from 0 to 6.

The upshot seems to be that when specifying extra plot points, care must be taken to ensure that there are some initial mesh cells without extra points in, and also a high enough MaxRecursion to propagate the mesh refinement from those cells across the whole region.


Voir la vidéo: Suorakulmion pinta-ala