Однако существует не менее хороший язык Asymptote, созданный под влиянием MetaPost. Появился он в 2004 году (то бишь где-то вчера утром по меркам старика Романовского) и обладает C++-подобным синтаксисом. Даже Java-подобным, я б сказал.
Например, нарисуем фигурную скобку:
unitsize(1cm); settings.outformat = "gif"; int height = 10; real slant_coeff = 0.12; transform t = shift(0, height/4); pair A = (0, 0), B = (1, 0), C = t * B; guide g = A{up}::{right}C; g = g -- reverse(shift(B-A) * g); g = g -- shift(B-A) * rotate(180) * g; g = slant(slant_coeff) * g; fill(g--cycle); add(currentpicture, reflect(t^-1 * A, t^-1 * B) * currentpicture);
Как видите, всё просто. Сперва задаём единичную длину и выходной формат, после чего инициализируем некоторые переменные. Как можно видеть, помимо обычных числовых типов есть transform, который по сути своей есть набор из 6 чисел, соответствующих определённому аффинному преобразованию в 2D. Преобразования применяются путём умножения слева. Их также можно умножать друг на друга (12-я строка) и возводить в целочисленную степень, в том числе и отрицательную, если это возможно (последняя строка). (Ещё стоит отметить, что в 7-й строке height/4 = 2.5, а вовсе не 2, как можно подумать.) Теперь по поводу guide. В Asymptote есть также тип path — путь в его топологическом смысле, — очень похожий на guide. Разница в том, что guide — это набор узлов и контрольных точек, на которых будет при отрисовке построена кривая Безье, а path заключает в себе уже построенную кривую. Путь в простейшем случае задаётся как набор точек, как-либо соединённых: соединение прямой линией обозначается '--', кривой Безье — '..', кривой Безье с минимумом перегибов — '::'. Также в фигурных скобках могут задаваться различные параметры навроде направления или кривизны. Для 3D используются типы triple, path3, transform3, surface, projection, ... И, да, между прочим: несмотря на всю схожесть с C++, в Asymptote нет постфиксных форм операторов инкремента/декремента. Только инфиксные. Так уж вышло. В общем, кто заинтересовался — гоу на http://asymptote.sourceforge.net |
No comments:
Post a Comment