Отдельный движок для геометрических примитивов

Отдельный движок для геометрических примитивов - Сообщения

#1 Опубликовано: 24.10.2010 08:06:48
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Чтобы не придумывать как в Mathcad'е различного рода ухищрения для отображения различной информации на графиках, я бы предложил сделать отдельный движок для работы с геометрическими примитивами. Что это означает. Нужно в программе как-то выделять работу с числами отдельно от работы с такими примитивами и ввести типизацию объектов.

Например: выделить отдельно работу с примитивами: точка, многорезок (полилиния) и многогранник. Эти понятия включены друг в друга. Операции с такими объектами нужно переопределить, допустим, при объединении точек получается многорезок, при объединении многорезков - их облако (множество).

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

Всё это бы хотелось иметь управляемым, т.е. инструментарий программы должен позволять несложно работать с множествами геометрических примитивов как целым, так и поэлементно. Mathcad не имел таких возможностей.

Когда мы работаем с файлами, мы уже давно не работаем с отдельными байтами, а с целыми структурами и объектами, всё же остальное скрыто в методах чтения, записи и навигации, так и математическая программа должна уже вырасти из простой манипуляции числами, а делать вещи, которые подразумеваются под этими манипуляциями.
Россия навсегда! Вячеслав Мезенцев
1 пользователям понравился этот пост
Fridel Selitsky 30.11.2010 06:47:00
#2 Опубликовано: 29.10.2010 10:48:27
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

Для начала можно было бы сделать вот такое. Если 2D компоненту на вход подаётся вектор из вложенных в него матриц, то интерпретировать это как коллекцию линий и отрисовывать каждую линию отдельно от других. Допустим, вот так:
[MATH]mat(mat(0;0;1;1;2;2);mat(0;0;2;2;2;2);mat(0;0;3;3;2;2);3;1)[/MATH] - это три отдельных отрезка.

То же самое и для 3D, только там три числа для точки.
[MATH]mat(mat(0;0;0;1;1;1;2;3);mat(0;0;0;2;2;2;2;3);mat(0;0;0;3;3;3;2;3);3;1)[/MATH]

Длина вложенных матриц может быть произвольной - это полилиния (многорезок).
Россия навсегда! Вячеслав Мезенцев
#3 Опубликовано: 29.11.2010 14:27:32
уни

уни

156 сообщений из 355 понравились пользователям.

Группа: User

По поводу универсальности графического движка для отображения картинок в 2D. Я понял теперь, что я сам имел в виду. Почитайте описание векторных языков:
Что такое Postscript и PCL?

Postscript для векторной картинки - это тоже самое, что ОПЗ для математического выражения. Если компонент для отображения графики написать как драйвер Postscript, возможности по отображения графики могут быть просто безграничны, т.е. зависеть от его сложности и мощности процессора. Можно начать с чего-нить по проще, например, HPGL, только конвертирование делать "на лету". Имея такой "движок" для рисования 2D изображений, наращивать функционал в программе, т.е. посредников в виде функций, будет гораздо проще.

Всегда приятней отталкиваться от чего-то уже готового, т.е. от стандарта. Внутри программы посчитанное векторное графическое изображение можно хранить как "текст" на языке ps, pcl, hpgl.

П.С. Хотя создание картинки с такого языка вроде дело не быстрое, но для простых геометрических примитивов, думается мне, можно будет реализовать это дело в реальном времени. Основная мысль - универсальный подход к описанию объектов, т.е. не изобретать велосипед. Тогда, возможно, будет проще разрабатывать функции, типы или структуры для работы с такими данными.
Россия навсегда! Вячеслав Мезенцев
1 пользователям понравился этот пост
zhuk 02.12.2010 10:18:00
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений