¿Cómo controlar la invariancia de escala?

9

Estoy tratando de juntar varios diagramas en una especie de tabla. Creo que esto se llama "impresión de índice" , la gente de fotografía hace eso cuando tienen que revisar muchas fotografías a la vez. De todos modos, este es el código:

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

No funciona como esperaba. Pero acerquémonos gradualmente. Primero, aquí hay una representación de un único mosaico:

uno

Ahora, déjenos hcatcuatro fichas juntas.

hcat

Agregue una segunda fila: (Vea cómo se espesan las características invariables de escala ).

tile2

Y así es como se ve con 4 filas:

loseta

¡Fuera de alcance!

Me parece que las características invariables de escala, como las puntas de flecha, se escalan en proporción al área de la imagen. Pero en este caso, necesito hacer crecer mi diagrama sin volver a escalar esas características. ¿Cómo puedo lograr eso?

Ignat Insarov
fuente

Respuestas:

5

La sección del manual del usuario sobre unidades de medida es lo que desea ver. Cosas como las puntas de flecha se miden por defecto en unidades "normalizadas", que se escalan para que siempre sean una proporción constante del tamaño de la imagen completa. Si entiendo su caso de uso correctamente, creo que probablemente quiera usar unidades locales en su lugar. Use la variante preparada de cualquier función de flecha que esté usando y dele un registro de opciones similar a

(with & headLength .~ local 0.1)

pero con cualquier número que haga que tus fotos se vean como quieres. Consulte el tutorial sobre flechas para obtener más información sobre las opciones de flechas.

Brent Yorgey
fuente