Як контролювати інваріантність масштабу?


9

Я намагаюся скласти кілька діаграм разом у якусь таблицю. Я думаю, що це називається "покажчик друку" , люди фотографії роблять це, коли їм доводиться перевіряти багато фотографій одночасно. У всякому разі, це код:

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

Це не працює, як я очікував. Але давайте підходимо до цього поступово. По-перше, ось візуалізація однієї плитки:

один

Тепер давайте hcatчотири плитки разом.

hcat

Додайте другий рядок: (Дивіться, як функції інваріантної шкали потовщуються.)

плитка2

Ось як це виглядає з 4 рядів:

плитка

З рук!

Мені здається, що інваріантні риси масштабу, такі як голови стрілок, масштабуються пропорційно площі зображення. Але в цьому випадку мені потрібно виростити свою діаграму без повторного масштабування цих функцій. Як я можу цього досягти?

Відповіді:


5

Розділ керівництва користувача про вимірювальні одиниці - це те, що ви хочете переглянути. Такі речі, як наконечники стріл, за замовчуванням вимірюються в "нормалізованих" одиницях, які масштабуються так, що вони завжди є постійною пропорцією розміру всієї картини. Якщо я правильно зрозумів ваш випадок використання, я думаю, ви, мабуть, хочете скористатися місцевими одиницями. Використовуйте праймедований варіант будь-якої функції зі стрілкою, яку ви використовуєте, і дайте їй можливість записати щось на зразок

(with & headLength .~ local 0.1)

але з будь-якою цифрою фотографії виглядатимуть так, як вам потрібно. Дивіться стрілку підручник для більше варіантів стрілок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.