Comment contrôler l'invariance d'échelle?

9

J'essaie de rassembler plusieurs diagrammes dans une sorte de tableau. Je pense que cela s'appelle "index print" , les photographes le font quand ils doivent revoir plusieurs photos à la fois. Quoi qu'il en soit, voici le code:

main :: IO ()
main = mainWith @(Diagram B)
     $ (tile . fmap renderOne) examples

renderOne :: AnyGraph -> Diagram B
renderOne (AnyGraph gr) = ...

tile :: [Diagram B] -> Diagram B
tile xs = let columns = (ceiling . sqrt . fromIntegral . length) xs
          in (vcat . fmap hcat . List.chunksOf columns) xs

Cela ne fonctionne pas comme je m'y attendais. Mais abordons-la progressivement. Tout d'abord, voici le rendu d'une seule tuile:

une

Maintenant, laissez-nous hcat quatre tuiles ensemble.

hcat

Ajouter une deuxième ligne: (Voir comment l' échelle est invariante caractéristiques s'épaississent.)

tile2

Et voici à quoi cela ressemble avec 4 lignes:

tuile

Incontrôlable!

Il me semble que les caractéristiques invariantes à l'échelle, telles que les têtes de flèche, sont mises à l'échelle proportionnellement à la zone de l'image. Mais dans ce cas, je dois développer mon diagramme sans redimensionner ces fonctionnalités. Comment puis-je y parvenir?

Ignat Insarov
la source

Réponses:

5

La section du manuel d'utilisation sur les unités de mesure est ce que vous voulez regarder. Les éléments tels que les pointes de flèche sont par défaut mesurés en unités "normalisées", qui sont mises à l'échelle de manière à ce qu'elles représentent toujours une proportion constante de la taille de l'image entière. Si je comprends bien votre cas d'utilisation, je pense que vous voudrez probablement utiliser des unités locales à la place. Utilisez la variante amorcée de la fonction de flèche que vous utilisez et donnez-lui un enregistrement d'options comme

(with & headLength .~ local 0.1)

mais quel que soit le numéro, vos photos ressemblent à ce que vous voulez. Voir le didacticiel sur les flèches pour plus d'informations sur les options de flèches.

Brent Yorgey
la source