スケールの不変性を制御するには?


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

期待どおりに動作しません。しかし、徐々にそれに近づいていきましょう。まず、これが単一のタイルのレンダリングです。

1

では、hcat4つのタイルを並べてみましょう。

hcat

2行目を追加しますスケール不変の特徴がどのように厚くなるかを確認してください)。

tile2

そして、これは4行でどのように見えるかです:

タイル

手を離れて!

矢印のような縮尺不変の特徴は、画像の面積に比例して縮尺されているように思えます。ただし、この場合、これらの機能を再スケーリングせずに図を拡大する必要があります。どうすればそれを達成できますか?

回答:


5

測定単位ユーザーマニュアルセクションは、あなたが見たいものです。矢印のようなものは、デフォルトでは「正規化された」単位で測定され、常に画像全体のサイズの一定の比率になるようにスケーリングされます。私はあなたのユースケースを正しく理解していれば、おそらくローカルユニットを代わりに使用したいと思うでしょう。使用している矢印関数のプライムされたバリアントを使用し、それにオプションのようなレコードを与えます

(with & headLength .~ local 0.1)

しかし、どんな数字でもあなたの写真はあなたが望むように見えます。矢印オプションの詳細については、矢印のチュートリアルを参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.