Основы компьютерной графики

Публикация № 877113

Программирование - Практика программирования

компьютерная графика

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

Основы компьютерной графики

Предисловие

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

Дальше новатор заявил, что подобное преобразование классическим способом сделать невозможно.

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

По ключевым словам «1С, графика» теперь поисковик выдаст столь интересную статью на инфостарте, потом найдется деятель, который напишет статью на другом ресурсе: «1С-ник – не программист, на примере компьютерной графики».

Теория

Все преобразования в данной статье будут рассматриваться в 2-мерной системе координат. Сразу отмечу, что преобразования в 3-мерной системе координат сильно не отличаются. Как правило объекты перемещаются и вращаются. С перемещением в декартовой системе координат все просто - координаты точек изменяются простым и понятным образом. Операция поворот – намного сложнее. Как выполнить преобразование поворот? Вычислить длину вектора, найти текущий угол, добавить угол поворота, получить новые координаты – сложно, но можно упростить.

Рассмотрим поворот точки А на угол d. Начальное положение точки рассмотрим, относительно точки А0 - вектор с 0 градусом поворота. Тогда координаты точки A будут равны:

x = x0 * cos(c)

y = x0 * sin(c)

Координаты точки A1 будут равны

x1 = x0 * cos(c + d)

y1 = x0 * sin(c + d)

cos(c + d) = cos (c) * cos(d) - sin(c) * sin(d)

sin(c + d) = sin(c) * cos(d) + sin(d) * cos(c)

x1 = x0 *cos (c) * cos(d) - x0 *sin(c) * sin(d)

x1 = x * cos (d) – y * sin(d)

y1 = x0 * sin(c) * cos(d) + x0 * sin(d) * cos(c)

y1 = y * cos(d) + x * sin(d)

Получившиеся выражения мы можем представить в виде произведения матриц

Надеюсь в этом месте многим в голову пришел вопрос: «Зачем приводить к произведению матриц?».

Дело в том что у произведения матриц есть свойство ассоциативности, которое выглядит следующим образом  A * B * C = A * (B * C). Всего-то порядок действий изменился, но это свойство окажется очень полезным в компьютерной графике, к нему вернемся позже.

Как уже многие догадались, все преобразования мы будем приводить к произведению матриц, с поворотом уже все ясно, как же выполнять остальные преобразования, например, перемещение.

Делается это следующим образом – матрицу точек будем задавать тремя значениями (x, y, 1).

Теперь матрица поворота будет выглядеть следующим образом

Матрица перемещения

Где Tx, Ty смещение по x и y.

Матрица масштабирования

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

Примеры графических преобразований

Для демонстрации примеров работы с графикой, я создал обработку в управляемом интерфейсе «графика.epf».

Работать мы будем всего с двумя объектами: окружность и квадрат. Каждый из объектов состоит из прямых линий,  линии - состоят из координат концов.

Начало координат я сместил примерно в центр, т.е. окружность расположена в начале координат.

Над квадратом мы будем выполнять следующие преобразования:

  1. Вращение вокруг центра квадрата.
  2. Вращение вокруг центра окружности.

Начальное положение квадрата – смещение по X на радиус сферы. Т.е. чтобы получить координаты нужно матрицу М каждой точки, умножить на матрицу преобразования – перемещения T1.

Теперь, допустим мы хотим повращать квадрат вокруг его центра, делать мы это будем следующим образом: сначала переместим квадрат M * T1, затем умножим на матрицу поворота R2

Теперь повернем квадрат относительно своего центра. Т.е. теперь мы должны матрицу М умножить на матрицу поворота R3

Затем умножить на матрицу перемещения T1, а потом снова на матрицу поворота R2.

Запишем в другой форме – матрицы преобразования вращения квадрата вокруг центра обозначим K с индексом, вокруг окружности O, а также перемещение квадрата на радиус окружности P.

Тогда преобразования примут вид:

M * K1 * K2 * … * KN * P * O1 * O2 * … ON

воспользуемся свойством ассоциативности

M * (K1 * K2 * … * KN) * (P * O1 * O2 * … ON)

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

Для квадрата таковых три:

  1. Вращение вокруг собственного центра (а также масштабирование);
  2. Вращение по радиусу окружности;
  3. Перемещение окружности (а также другие преобразования).

Другие преобразования - это, например, проецирование.

 

 

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

Зато в трехмерной графике проецирование – вещь очень важная. Дело в том угол человеческого зрения – не прямой, а как раз мы видим проекцию, т.е. чем дальше от нас предмет, тем он меньше, подобным образом трехмерное изображение проецируется на плоскость монитора.

После умножения матрицы  координат точки на матрицу проецирования – изменится третье значение матрицы координат, которое обычно равняется 1. В  данном случае, третье значение будет отличаться от 1, матрица координат примет вид (x, y, s).  Что делать с третьим значением? Нужно каждую координату умножить на полученный коэффициент s.

Трехмерная графика

Если статья окажется интересной для посетителей Инфостарта, в следующей статье напишу про основы трехмерной графики, там тоже есть интересные моменты.

Тестирование проводилось на программных файлах 8.3.12.1529.

23

Скачать файлы

Наименование Файл Версия Размер
Пример работы с компьютерной графикой
.epf 9,56Kb
30.07.18
7
.epf 9,56Kb 7 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Неопределено 31.07.18 02:03 Сейчас в теме
Тот факт, что эта статья вышла сразу после моей -- совпадение?
3. HAMMER_59 165 31.07.18 07:00 Сейчас в теме
(1) По Вашей статье нужно уже обзор 3Д делать. Однозначно, велосипед изобретаете, через матрицы проще. Кроме того я бы отметил невидимые грани пунктиром, опять же в вашем случае, т.к. у Вас нет уменьшения координат x, y с возрастанием координаты Z, видимость грани определить очень просто - умножаем 2 вектора, получаем перпендикулярно направленный, и по координате Z определяем, где лицевая часть плоскости.
4. Неопределено 43 31.07.18 07:31 Сейчас в теме
(3) Вы не ответили на вопрос. Мою статью можно обсудить в моей статье.
5. HAMMER_59 165 31.07.18 07:46 Сейчас в теме
(4) Конечно совпадение. Я уже указал по поводу какой статьи написал свою "Продвинутая графика". Когда я отправлял на модерацию статью, а делал я это неоднократно, Вашей статьи еще не было.
6. Неопределено 43 31.07.18 07:51 Сейчас в теме
(5)Да, с модерацией тут проблема: моя статья проходила её 7 часов из-за разницы во времени и на момент публикации она появилась в конце первой страницы статей т.к. ставится дата отправки на модерацию, а не одобрения статьи. В итоге она почти сразу утонула во второй странице и осталась незамеченной, но дело не в этом. У нас пересекаются темы, а моя предыдущая статья (про часы) была продублирована другим пользователем, вот мне и стало интересно, совпадение ли это всё. Но раз так, то всё ок.
2. DrAku1a 1301 31.07.18 04:12 Сейчас в теме
Статья интересная. Не практичная, но именно - интересная!
succub1_5; +1 Ответить
7. WalterMort 298 31.07.18 09:23 Сейчас в теме
Автор продолжает считать матрицу поворота не частным случаем проецирования, а первоосновой преобразований. А свои заблуждения фундаментальными знаниями.
9. HAMMER_59 165 31.07.18 10:16 Сейчас в теме
(7) Я же вам предоставил ссылку на теорию, читайте, проверяйте, сравнивайте.
Реализация в коде уже тоже выложена. Все вертится, крутится, перемещается, масштабируется во всех вариантах.
Я, конечно, понимаю что для Вас волшебство, преобразовать единичные векторы по X, Y, а потом утверждать, что вот это чудо теперь вы знаете смещение и коэффициенты по X, Y.
Но даже тот минимум, что я реализовал вы не сможете повторить, со своим волшебным подходом, т.к. он в принципе ограничен.
8. WalterMort 298 31.07.18 09:27 Сейчас в теме
"Дальше новатор заявил, что подобное преобразование классическим способом сделать невозможно."

Еще и лжец, вдобавок.
10. WalterMort 298 31.07.18 11:05 Сейчас в теме
После умножения матрицы координат точки на матрицу проецирования – изменится третье значение матрицы координат, которое обычно равняется 1. В данном случае, третье значение будет отличаться от 1, матрица координат примет вид (x, y, s). Что делать с третьим значением? Нужно каждую координату умножить на полученный коэффициент s.


Это самое тупое что я когда-нибудь читал. После умножения на матрицу требуется домножить.

Wiki: Линейное отображение

Статья по книге Шилова от 1961. Странно, что вы называете меня новатором.

Просвещайтесь. Там среди вариантов так хорошо знакомая Вам матрица поворота.
14. HAMMER_59 165 31.07.18 12:07 Сейчас в теме
(10)
Статья по книге Шилова от 1961. Странно, что вы называете меня новатором.

Просвещайтесь. Там среди вариантов так хорошо знакомая Вам матрица поворота.


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

Если не обратили внимания, матрица преобразований там 2х2, и у меня самое интересное до определенного этапа она была 2х2, затем была дополнена. Да по-любому совпадение.
15. WalterMort 298 31.07.18 12:15 Сейчас в теме
Все те же матрицы преобразований, и никакого бреда про векторы, базисы.


Чукча не читатель?

Из статьи на вики:

"Матрица линейного оператора — матрица, выражающая линейный оператор в некотором базисе. Для того, чтобы её получить, необходимо подействовать оператором на векторы базиса и координаты полученных векторов (образов базисных векторов) записать в столбцы матрицы."

Если не обратили внимания, матрица преобразований там 2х2, и у меня самое интересное до определенного этапа она была 2х2, затем была дополнена. Да по-любому совпадение.


Матрица 2x2 это векторы базиса, Совпадение? Не думаю.

Просто вы невнимательно прочитали мою публикацию, прочитайте её еще раз и сравните с тем что написано в статье на вики. Может быть даже ошибку найдете, а она есть.
18. HAMMER_59 165 31.07.18 12:45 Сейчас в теме
(15) Сделайте обработку подобную моей своим мегаспособом, вот тогда и подискутируем.
Разово переместить и повернуть (или исказить) - это проще некуда.
Да даже то, что я сделал это крайне просто, но сомневаюсь, что даже такое Вам под силу.
11. WalterMort 298 31.07.18 11:28 Сейчас в теме
Или вы считаете своим волшебством, недоступным каждому, комбинацию преобразований в одну матрицу? Тогда вынужден вас разочаровать...
12. HAMMER_59 165 31.07.18 11:45 Сейчас в теме
(11) Вы сначала сделайте подобное, а потом пишите про доступность волшебства каждому.

Что там у Вас происходит для поворота? Причем это поворот даже не относительно другого объекта.

В моем случае, любое действие выполняется практически одинаково:

Объекты выглядят так:
оКвадрат = Новый Структура("Точки,Линии,Матрицы,Владелец");


Для поворота вокруг собственной оси квадрата, после любых преобразований (масштабирования, вращения вокруг сферы, перемещения сфера и прочего прочего) вызывается всегда одна процедура

&НаКлиенте
Процедура КомандаВращатьКвадрат(Команда)
	// Вставить содержимое обработчика.
	ПреобразованиеВращение(оКвадрат.Матрицы[0], УголВращенияКвадрата);
	ВывестиОбъект(оКвадрат);
	
КонецПроцедуры
Показать


Для вращения вокруг сферы другое имя переменный угла вращения и другой номер матрицы.

Непосредственно матрица вращения
Процедура ПреобразованиеВращение(М, Угол)
	М1 = СоздатьМатрицу3х3();
	
	Pi = 3.1415926535897932;
	УголРадианы = Угол / 180 * Pi;
	Косинус = Cos(УголРадианы);
	Синус = Sin(УголРадианы);
	
	М1[0][0] = Косинус;
	М1[0][1] = -Синус;
	М1[1][0] = Синус;
	М1[1][1] = Косинус;
	
	УмножитьМатрицы3х3(М, М1);	
КонецПроцедуры
Показать


Вывод объекта
Процедура ВывестиОбъект(Объект)
	МатрицаПреобразований = ПолучитьМатрицуПреобразований(Объект);
	Точки = ПолучитьКоордиантыТочек(Объект, МатрицаПреобразований);
	ОбновитьКоординатыЛиний(Объект, Точки);

КонецПроцедуры


Функция ПолучитьМатрицуПреобразований(Объект)
	М = СоздатьМатрицу3х3();
	
	Для Каждого Матрица Из Объект.Матрицы Цикл
		УмножитьМатрицы3х3(М, Матрица);		
	КонецЦикла;
	
	Если Объект.Владелец <> Неопределено Тогда
		Для Каждого Матрица Из Объект.Владелец.Матрицы Цикл
			УмножитьМатрицы3х3(М, Матрица);		
		КонецЦикла;		
	КонецЕсли;
	
	Возврат М;
КонецФункции
Показать


Функция ПолучитьКоордиантыТочек(Объект, МатрицаПреобразований)
	рТочки = Новый Массив();
	
	Для Каждого Точка Из Объект.Точки Цикл
		рТочка = Новый Массив(3);
		рТочка[0] = Точка[0] * МатрицаПреобразований[0][0] + Точка[1] * МатрицаПреобразований[1][0] + Точка[2] * МатрицаПреобразований[2][0];
		рТочка[1] = Точка[0] * МатрицаПреобразований[0][1] + Точка[1] * МатрицаПреобразований[1][1] + Точка[2] * МатрицаПреобразований[2][1];
		рТочка[2] = Точка[0] * МатрицаПреобразований[0][2] + Точка[1] * МатрицаПреобразований[1][2] + Точка[2] * МатрицаПреобразований[2][2];
			
		Если рТочка[2] <> 1 Тогда
			рТочка[0] = рТочка[0] * рТочка[2];
			рТочка[1] = рТочка[1] * рТочка[2];
			рТочка[2] = 1;			
		КонецЕсли;
		
		
		рТочка[0] = рТочка[0] + 80;
		рТочка[1] = рТочка[1] + 80;
		
		рТочки.Добавить(рТочка);		
	КонецЦикла;
	
	Возврат рТочки;
	
КонецФункции
Показать


Т.е. никаких танцев с бубном, если нужно вращать, так и передается угол вращения, при этом вращаю вокруг любого объекта, с любыми преобразованиями.
paybaseme; +1 Ответить
16. WalterMort 298 31.07.18 12:18 Сейчас в теме
(12)
Для вращения вокруг сферы


Вы понимаете различие между сферой и окружностью?


Чтобы реализовать Ваше волшебство, мне достаточно добавить в обработку функцию переможения матриц. Функция создания преобразования по заданному углу уже есть. Будет время продемонстрирую.
13. HAMMER_59 165 31.07.18 11:54 Сейчас в теме
(11) Доступно, не доступно, но Вы то пошли каким-то другим путем.
Ну даже банальное, как вращается у меня квадрат вокруг окружности. Это перемещение, с дальнейшим вращением. Интересно как вы это со своим подходом сделаете.

Я уже писал "и это еще детский сад компьютерной графики, т.е. совсем ни о чем"
17. user774630 31.07.18 12:45 Сейчас в теме
И статьи небанальные, и читать интересно, но почему комментарии постоянно сводятся к взаимным подковыркам? Грустно.
Автору спасибо за статью.
pvlunegov; Craig; TreeDogNight; catv; CyberCerber; rintik; +6 Ответить
19. CyberCerber 282 31.07.18 13:44 Сейчас в теме
(17) Да, автор, вроде, пишет умные статьи про комп графику, но в комментах ведет себя совсем по-другому.
pvlunegov; +1 Ответить
20. Неопределено 43 01.08.18 02:10 Сейчас в теме
(19) Я нашёл только одну его статью про графику, поэтому на всякий случай хочу заметить что он пишет ещё и в моих статьях и я не хочу чтобы нас спутали.
21. CyberCerber 282 01.08.18 09:13 Сейчас в теме
(20) А, ну да. Просто он по всюду оставляет свои едкие комменты, как будто он главный спец по графике на ИС
22. HAMMER_59 165 01.08.18 09:41 Сейчас в теме
(21) Вам никто не говорил, что некоторые вещи нужно приватно делать? Есть у Вас тут небольшой кружок, соберитесь приватно, и делайте там друг с другом что хотите. Зачем же это выставлять на общее обозрение? Это не культурно.

Комментарий я написал к двум статьям. "Непределено" сам зашел ко мне в статью, и сам же предложил оставить комментарий в его статье, а сейчас негодует.

Второй автор меня действительно поразил своим особым мнением на основы компьютерной графики, у него то конечно графика продвинутая. Он же и предложил написать мне свою статью. А я взял и не поленился, может у меня не настолько подвешенный язык, но с теорией компьютерной графики я знаком.

А что конкретно едкого я написал: "Я всего лишь указал, что авторы некоторых статей изобрели велосипед, притом на квадратных колесах". Почему это вдруг, так в душу запало? Так ведь оно и есть на самом деле, чего тут обидного?

Я уже пример приводил, это то же самое, что заявить, да ну эти запросы, объекты, смотрите как я напрямую с двоичным файлом работаю, какую я БД придумал. А потом еще и обижаться, когда укажут, что так уже никто не работает.
pvlunegov; +1 Ответить
24. Неопределено 43 01.08.18 10:12 Сейчас в теме
(22)
предложил оставить комментарий в его статье, а сейчас негодует

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

Как я уже писал, я выбрал эту тему потому что так в 1С ещё никто не работает. Да, эта технология сильно отстала от реальности, но если смотреть на эту реальность через призму 1С, здесь она в принципе не получила развития и я просто хотел подтолкнуть людей в данном направлении. Да, топорными средствами, потому что в начале изобрели топор, а только потом появились станки и топора я до этого не видел.
Есть у Вас тут небольшой кружок

Нет здесь никакого кружка. Я тут никого не знаю и меня никто не знает. У меня к вам нет претензий и не было. Кому-то могла не понравиться ваша критика, но не мне. Я её спокойно принял и всё.
25. HAMMER_59 165 01.08.18 11:53 Сейчас в теме
(24)
По поводу велосипеда, вот эта статья -- тоже велосипед, но я об этом молчу


Сначала вы вырвали фразу из контекста, а теперь и вовсе изменили фразу. Одно дело рассказывать про велосипед, а совсем другое дело изобретать велосипед.

Я уже давно не понимаю с чем Вы спорите. Вы написали что учитесь работать с компьютерной графикой, я Вам посоветовал почитать литературу по компьютерной графике. Я Вас ни к чему не принуждаю.
26. Неопределено 43 01.08.18 12:31 Сейчас в теме
(25) Как же с вами трудно вести диалог. Начали спор вы, пытаясь выставить меня идиотом, в котором я с вами соглашался. Выдумали какой-то сговор против себя, а теперь пытаетесь выставить себя жертвой. Какую фразу я изменили, когда вы цитируете сами себя?
"Я всего лишь указал, что авторы некоторых статей изобрели велосипед, притом на квадратных колесах"
Я не придумал ничего нового и обозначил это. Вы тоже не придумали, но ничего об этом не сказали. Но вас никто не ткнул в это носом, а вы это сделали, а теперь пытаетесь всё переиначить, будто агрессор здесь я.
27. HAMMER_59 165 01.08.18 12:57 Сейчас в теме
(26) Вы слишком много приняли на свой счёт.
Высказывания у меня местами действительно чересчур резкие. "Я солдат и красивых слов не знаю..."
Я обобщил (причесал всех под одну гребенку), но резкие высказывания относятся в большей части совсем не к Вам, а к другому человеку. Именно к тому у которого "продвинутая графика".

Странная какая-то позиция, если говорят, что можно сделать лучше, значит назвали идиотом.
Я выкладывал свою выгрузку из ЗУП3 в КА1.1, сделана она была по принципам ЗИК. В тех же комментариях мне указали, что это уже пройденный этап, и сейчас уже реализовано лучше. Я ознакомился как сейчас реализована выгрузка, и действительно лучше, и переписал свою выгрузку. И не считаю себя от этого идиотом.

При этом я не стал писать, что да Вы ничего не понимаете, я сделал как сделал, и вобще я написал статью как можно реализовать обмен через XML, не используя, конвертацию данных.
23. HAMMER_59 165 01.08.18 09:47 Сейчас в теме
(21) Хотите изменить культуру общения? Начните с себя. Ни одного ведь комментария по содержанию, сами же и разводите: "А ты, а он, а я".

Мало того еще и кучкой гавкаете, а я человек эмоциональный, уподобляюсь вам.
28. CyberCerber 282 01.08.18 13:32 Сейчас в теме
(23) Никакого кружка и кучки нет, я знаю других авторов также как и вас, т.е. почти не знаю. Просто у вас было много резких некрасивых высказываний в комментариях, об этом я и сказал.
29. HAMMER_59 165 01.08.18 13:51 Сейчас в теме
(28)
Просто у вас было много резких некрасивых высказываний в комментариях, об этом я и сказал

И поэтому Вы решили добавить свое резкое и некрасивое высказывание, на что я Вам уже ответил, что в Вашем случае самое адекватное - с себя начать, а не в других пальчиком тыкать.
30. WalterMort 298 01.08.18 19:33 Сейчас в теме
Автор просто считает себя очень умным. Обычно так делают глупые люди.
Прикрепленные файлы:
31. HAMMER_59 165 02.08.18 07:01 Сейчас в теме
(30) Ну что за детский сад? "А вот он считает себя самым умным, но он глупый" Я уже далеко не в том возрасте, чтобы мерять людей подобными категориями. Давно уже убедился, что если один человек силен в одном, например, отлично учился в институте, это еще вовсе не означает, что он лучше во всем.

Странный Вы. Эту часть я у Вас уже видел, что такие преобразования можно сделать "продвинутым" методом.
Вращение рыбы добавьте вокруг собственной оси + масштабирование рыбы и всего результата.

После этого посмотри на Ваш код.
33. WalterMort 298 02.08.18 10:07 Сейчас в теме
(31) Если не заметили, рыба не растягивается как сопля подобно Вашему квадрату по ходу движения. Это сделано специально обратными преобразованиями.

Посмотрите на код.
Прикрепленные файлы:
Рисунки.epf
32. HAMMER_59 165 02.08.18 07:38 Сейчас в теме
(30) Есть такое выражение "упертый как баран"
Не видно, что Ваш "продвинутый" метод - это танцы с бубном?
Уже сейчас Вам приходится вымучивать расчет базиса, а это пока всего два вектора. А когда дойдет до 3 координаты, что делать будете?
Да фигня сейчас третий вектор дорисуем?

И это только еще начало, а у Вас там уже полная каша.
34. WalterMort 298 02.08.18 10:33 Сейчас в теме
(32) Когда дойдет до третьей координаты будем дальше делать плагин для unity по конструированию дорожных развязок с плавной адаптацией террэйна. Вот там реальные вопросы вполне успешно решаются. Векторами и кватернионами. Не через синус и косинус. А этот бессмысленный спор крадет у меня время на него. Посему позволю себе откланяться.

p/s про кашу на Вашем месте я бы стал распространяться, я видел Ваш код.
Прикрепленные файлы:
35. pvlunegov 140 03.08.18 07:09 Сейчас в теме
(34) Согласен с вами.
Автору советую почитать про квартенионы https://habr.com/post/183908/
и применять их на практике.
Эти классы давно и успешно применяются в 3 мерной графике и в 2 мерной тоже.
Я считаю так: в 1с надо интегрировать то что наработано в других языках программирования годами, а не изобретать велосипеды и играть в песочницах.
Автор, интересуетесь графикой? Возьмите Unity, найдите там нужные вам технологии, почитайте теорию и переносите все на 1с.
Общие подходы переносятся на любой язык, так как это математика.
36. KontoraB 03.08.18 09:54 Сейчас в теме
А нафига бухгалтеру компьютерная графика ? Платежки рисовать ?
37. HAMMER_59 165 03.08.18 11:46 Сейчас в теме
(36) Почти 10 лет только на инфостарте, и до сих пор только платежки бухгалтерам рисуете?
Ничем Вам помочь могу.

Я так понимаю все что в остальных статях написано, Вы широко используете в практике автоматизации работы бухгалтеров, или как минимум планируете использовать.
CyberCerber; +1 Ответить
38. KontoraB 04.08.18 06:39 Сейчас в теме
(37) Hammer - компьютерная графика это отдельная отрасль в IT индустрии и я думаю что нефиг натягивать это на 1С или переубедите меня - скажите как практически ( и в каких случаях ) конечному пользователю будет удобно и полезно использовать ваше решение в своей работе
Оставьте свое сообщение