Bagaimana cara mengontrol invarian skala?


9

Saya mencoba menyatukan beberapa diagram dalam semacam tabel. Saya pikir ini disebut "indeks cetak" , orang-orang fotografi melakukan itu ketika mereka harus meninjau banyak foto sekaligus. Bagaimanapun, ini kodenya:

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

Itu tidak berfungsi seperti yang saya harapkan. Tapi mari kita dekati secara bertahap. Pertama, ini adalah render satu ubin:

satu

Sekarang, mari kita hcatempat ubin bersama.

hcat

Tambahkan baris kedua: (Lihat bagaimana fitur invarian skala menebal.)

tile2

Dan ini adalah tampilannya dengan 4 baris:

ubin

Tidak terkendali!

Sepertinya saya bahwa fitur invarian skala, seperti kepala panah, diskalakan sesuai dengan area gambar. Tetapi dalam kasus ini, saya perlu menumbuhkan diagram saya tanpa mengubah skala fitur-fitur itu. Bagaimana saya bisa mencapainya?

Jawaban:


5

Bagian manual pengguna pada unit pengukuran adalah apa yang ingin Anda lihat. Hal-hal seperti panah secara default diukur dalam satuan "dinormalisasi", yang diskalakan sehingga selalu menjadi proporsi konstan dari ukuran keseluruhan gambar. Jika saya memahami use case Anda dengan benar, saya pikir Anda mungkin ingin menggunakan unit lokal saja. Gunakan varian prima dari fungsi panah apa pun yang Anda gunakan, dan berikan opsi untuk merekam sesuatu

(with & headLength .~ local 0.1)

tetapi dengan angka berapa pun membuat foto Anda terlihat seperti yang Anda inginkan. Lihat tutorial panah untuk lebih lanjut tentang opsi panah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.