Язык или пакет для рисования геометрических диаграмм - PullRequest
19 голосов
/ 23 октября 2010

Я ищу язык или пакет на существующем языке, который подходит для определения и рисования геометрических диаграмм.

Например, я хотел бы нарисовать гексагональную сетку с наложенной на нее двойной треугольной сеткой. Теперь я могу сесть, нанести немного локтевого смазочного материала, чтобы отработать триггер вручную, и придумать какой-нибудь Postscript или SVG, который будет отображать такую ​​сетку. Но мне интересно, есть ли какие-нибудь языки или пакеты, которые помогут мне с этим; которые позволяют легко определить шестиугольную сетку, найти центры и нарисовать треугольную сетку над ней.

Какой самый простой способ сделать это?

Примеры кода, показывающие, как легко создавать такие геометрически заданные диаграммы, приветствуются. В частности, пожалуйста, покажите, как легко нарисовать гексагональную сетку; хотя я мог сделать это на любом языке, рисуя все линии вручную, мне интересны языки или пакеты, которые делают такую ​​геометрическую диаграмму простой и понятной.

Bounty

Поскольку на этот вопрос дан ответ, но ответ более сложный, чем я бы предпочел, я предложу вознаграждение человеку, который может создать самый короткий и простой код на любом существующем ранее языке и с использованием любого существующего ранее пакет для рисования гексагональной сетки с наложенной на нее двойной треугольной сеткой; двойная треугольная сетка - это треугольная сетка, которую вы получаете, если вы соединяете центр каждого шестиугольника с центром каждого из соседних шестиугольников. См., Например, ответ Antal S-Z ; его пример делает свою работу, но я искал язык, который бы облегчил эту проблему. Вы можете либо создать сетку, которая будет приблизительно прямоугольной, как в его примере (нечетные строки выровнены, а четные строки выровнены), либо сетку в стиле доски Hex (каждая строка сдвинута вправо на половина гексагона, образуя ромб); оба приемлемы.

Программа может принимать ввод в виде функции или подпрограммы на языке, который принимает количество строк и количество столбцов, или принимать ввод, переданный в командной строке с указанием строк и столбцов. Он должен производить вывод в любом стандартном и обычном графическом формате, таком как Postscript, PDF, SVG, PNG или PNM ; выходные данные должны содержать шестнадцатеричную сетку и треугольную сетку, в некоторых контрастных цветах, весе линии или стиле линии, чтобы прояснить диаграмму.

Я ищу самый короткий и простой ответ, как способ найти язык или пакет, который лучше всего подходит для описания диаграмм такого типа; щедрость пойдет на самую короткую программу, которая решит проблему. Это не кодовый гольф, поэтому я не буду считать количество символов или строк кода. Если нет кратчайшего очевидного ответа, я буду измерять на основе количества токенов; сколько токенов на вашем языке нужно, чтобы выразить эту проблему? Таким образом, удобочитаемые константы и имена переменных с использованием библиотечных функций, комментариев, пробелов и т. Д. Все в порядке, поскольку они не увеличивают количество токенов. Это все еще не идеальная метрика (у Лиспа будет еще несколько токенов, так как вам нужно больше скобок для разграничения ваших арифметических выражений, и я уверен, что если вы чрезмерно оптимизируете эту метрику, вы все равно можете создать некоторый нечитаемый код), но это приблизительное руководство по сложности вашего кода.

Итак, задача для награды - создать самую короткую программу, которая рисует шестнадцатеричную сетку с наложенной треугольной сеткой. Пожалуйста, опубликуйте свой код, ссылки на язык и все пакеты, которые вы использовали, приблизительный подсчет токенов, если это возможно, и пример выходного изображения. Существующим ответом является планка, которую вы должны побить, чтобы пройти квалификацию; это делает работу, но я хотел бы что-то короче и проще.

Чтобы у меня было достаточно времени, чтобы посмотреть на ответы и назначить награду, все ответы должны быть представлены как минимум за 24 часа до крайнего срока. Я могу или не могу рассмотреть любые ответы, представленные менее чем за 24 часа до крайнего срока.

Ответы [ 12 ]

1 голос
/ 23 октября 2010

Попробуйте MetaPost .

0 голосов
/ 23 октября 2010

Я обычно использую MATLAB для этого.

...