1 Pages (3 items)
Отдельный движок для геометрических примитивов - Messages
#1 Posted: 10/24/2010 8:06:48 AM
Чтобы не придумывать как в Mathcad'е различного рода ухищрения для отображения различной информации на графиках, я бы предложил сделать отдельный движок для работы с геометрическими примитивами. Что это означает. Нужно в программе как-то выделять работу с числами отдельно от работы с такими примитивами и ввести типизацию объектов.
Например: выделить отдельно работу с примитивами: точка, многорезок (полилиния) и многогранник. Эти понятия включены друг в друга. Операции с такими объектами нужно переопределить, допустим, при объединении точек получается многорезок, при объединении многорезков - их облако (множество).
точка - вектор координат;
отрезок - это многорезок с двумя точками;
сумма отрезков - это множество из отрезков;
...
должны быть определены такие операции как поворот, сдвиг и масштабирование более простым способом, чем умножение на соотв-щие матрицы, т.е. скрыт тривиальный код геометрических преобразований.
Всё это бы хотелось иметь управляемым, т.е. инструментарий программы должен позволять несложно работать с множествами геометрических примитивов как целым, так и поэлементно. Mathcad не имел таких возможностей.
Когда мы работаем с файлами, мы уже давно не работаем с отдельными байтами, а с целыми структурами и объектами, всё же остальное скрыто в методах чтения, записи и навигации, так и математическая программа должна уже вырасти из простой манипуляции числами, а делать вещи, которые подразумеваются под этими манипуляциями.
Например: выделить отдельно работу с примитивами: точка, многорезок (полилиния) и многогранник. Эти понятия включены друг в друга. Операции с такими объектами нужно переопределить, допустим, при объединении точек получается многорезок, при объединении многорезков - их облако (множество).
точка - вектор координат;
отрезок - это многорезок с двумя точками;
сумма отрезков - это множество из отрезков;
...
должны быть определены такие операции как поворот, сдвиг и масштабирование более простым способом, чем умножение на соотв-щие матрицы, т.е. скрыт тривиальный код геометрических преобразований.
Всё это бы хотелось иметь управляемым, т.е. инструментарий программы должен позволять несложно работать с множествами геометрических примитивов как целым, так и поэлементно. Mathcad не имел таких возможностей.
Когда мы работаем с файлами, мы уже давно не работаем с отдельными байтами, а с целыми структурами и объектами, всё же остальное скрыто в методах чтения, записи и навигации, так и математическая программа должна уже вырасти из простой манипуляции числами, а делать вещи, которые подразумеваются под этими манипуляциями.
Россия навсегда!
Вячеслав Мезенцев
1 users liked this post
Fridel Selitsky 11/30/2010 6:47:00 AM
#2 Posted: 10/29/2010 10:48:27 AM
Для начала можно было бы сделать вот такое. Если 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]
Длина вложенных матриц может быть произвольной - это полилиния (многорезок).
[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 Posted: 11/29/2010 2:27:32 PM
По поводу универсальности графического движка для отображения картинок в 2D. Я понял теперь, что я сам имел в виду. Почитайте описание векторных языков:
Что такое Postscript и PCL?
Postscript для векторной картинки - это тоже самое, что ОПЗ для математического выражения. Если компонент для отображения графики написать как драйвер Postscript, возможности по отображения графики могут быть просто безграничны, т.е. зависеть от его сложности и мощности процессора. Можно начать с чего-нить по проще, например, HPGL, только конвертирование делать "на лету". Имея такой "движок" для рисования 2D изображений, наращивать функционал в программе, т.е. посредников в виде функций, будет гораздо проще.
Всегда приятней отталкиваться от чего-то уже готового, т.е. от стандарта. Внутри программы посчитанное векторное графическое изображение можно хранить как "текст" на языке ps, pcl, hpgl.
П.С. Хотя создание картинки с такого языка вроде дело не быстрое, но для простых геометрических примитивов, думается мне, можно будет реализовать это дело в реальном времени. Основная мысль - универсальный подход к описанию объектов, т.е. не изобретать велосипед. Тогда, возможно, будет проще разрабатывать функции, типы или структуры для работы с такими данными.
Что такое Postscript и PCL?
Postscript для векторной картинки - это тоже самое, что ОПЗ для математического выражения. Если компонент для отображения графики написать как драйвер Postscript, возможности по отображения графики могут быть просто безграничны, т.е. зависеть от его сложности и мощности процессора. Можно начать с чего-нить по проще, например, HPGL, только конвертирование делать "на лету". Имея такой "движок" для рисования 2D изображений, наращивать функционал в программе, т.е. посредников в виде функций, будет гораздо проще.
Всегда приятней отталкиваться от чего-то уже готового, т.е. от стандарта. Внутри программы посчитанное векторное графическое изображение можно хранить как "текст" на языке ps, pcl, hpgl.
П.С. Хотя создание картинки с такого языка вроде дело не быстрое, но для простых геометрических примитивов, думается мне, можно будет реализовать это дело в реальном времени. Основная мысль - универсальный подход к описанию объектов, т.е. не изобретать велосипед. Тогда, возможно, будет проще разрабатывать функции, типы или структуры для работы с такими данными.
Россия навсегда!
Вячеслав Мезенцев
1 users liked this post
zhuk 12/2/2010 10:18:00 AM
1 Pages (3 items)
-
New Posts
-
No New Posts