Làm thế nào để kiểm soát quy mô bất biến?


9

Tôi đang cố gắng đặt một vài sơ đồ lại với nhau trong một loại bảng. Tôi nghĩ rằng đây được gọi là "in chỉ mục" , những người chụp ảnh làm điều đó khi họ phải xem lại nhiều bức ảnh cùng một lúc. Dù sao, đây là mã:

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

Nó không hoạt động như tôi mong đợi. Nhưng hãy để chúng tôi tiếp cận nó dần dần. Đầu tiên, đây là kết xuất của một ô duy nhất:

một

Bây giờ, chúng ta hãy hcatbốn gạch với nhau.

mèo

Thêm một hàng thứ hai: (Xem cách tính năng bất biến tỷ lệ dày lên.)

gạch2

Và đây là giao diện của nó với 4 hàng:

ngói

Ngoài tầm tay!

Dường như với tôi rằng các tính năng bất biến tỷ lệ, chẳng hạn như đầu mũi tên, được chia tỷ lệ theo diện tích của hình ảnh. Nhưng trong trường hợp này, tôi cần phát triển sơ đồ của mình mà không cần điều chỉnh lại các tính năng đó. Làm thế nào tôi có thể đạt được điều đó?

Câu trả lời:


5

Phần hướng dẫn sử dụng trên các đơn vị đo lường là những gì bạn muốn xem xét. Những thứ như đầu mũi tên theo mặc định được đo bằng các đơn vị "chuẩn hóa", được chia tỷ lệ sao cho chúng luôn luôn là một tỷ lệ không đổi của kích thước của toàn bộ hình ảnh. Nếu tôi hiểu chính xác trường hợp sử dụng của bạn, tôi nghĩ có lẽ bạn muốn sử dụng các đơn vị địa phương thay thế. Sử dụng biến thể được mồi sẵn của bất kỳ chức năng mũi tên nào bạn đang sử dụng và cung cấp cho nó một tùy chọn ghi lại một cái gì đó như

(with & headLength .~ local 0.1)

nhưng với bất cứ con số nào làm cho hình ảnh của bạn trông giống như bạn muốn. Xem hướng dẫn mũi tên để biết thêm về các tùy chọn mũi tên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.