Из 2D фигуры в 3D (ввод третьей координаты) - вопрос №1698986

Заданы координаты точек некой фигуры
  • tochk[0][0]=0; tochk[0][1]=130;
  • tochk[1][0]=40; tochk[1][1]=90;
  • tochk[2][0]=40; tochk[2][1]=40;
  • tochk[3][0]=110; tochk[3][1]=40;
  • tochk[4][0]=150; tochk[4][1]=0;
  • tochk[5][0]=190; tochk[5][1]=40;
  • tochk[6][0]=260; tochk[6][1]=40;
  • tochk[7][0]=260; tochk[7][1]=90;
  • tochk[8][0]=300; tochk[8][1]=130;
  • tochk[9][0]=260; tochk[9][1]=170;
  • tochk[10][0]=260;tochk[10][1]=220;
  • tochk[11][0]=190;tochk[11][1]=220;
  • tochk[12][0]=150;tochk[12][1]=260;
  • tochk[13][0]=110;tochk[13][1]=220;
  • tochk[14][0]=40;tochk[14][1]=220;
  • tochk[15][0]=40;tochk[15][1]=170;
Строится она, например, с помощью LineTo.

Можете объяснить, как лучше реализовать преобразование этой фигуры в 3д, не используя всяких навороченных методов?

Попытался немного схитрить и просто сделал дубликат этих точек с некоторым смещением.
  • tochk[0][0]=0; tochk[0][1]=130; tochk[0][2]=tochk[0][0]+floor(tol*cos(ug)); tochk[0][3]=tochk[0][1]+floor(tol*sin(ug));
  • tochk[1][0]=40; tochk[1][1]=90; tochk[1][2]=tochk[1][0]+floor(tol*cos(ug)); tochk[1][3]=tochk[1][1]+floor(tol*sin(ug));
  • tochk[2][0]=40; tochk[2][1]=40; tochk[2][2]=tochk[2][0]+floor(tol*cos(ug)); tochk[2][3]=tochk[2][1]+floor(tol*sin(ug));
  • tochk[3][0]=110; tochk[3][1]=40; tochk[3][2]=tochk[3][0]+floor(tol*cos(ug)); tochk[3][3]=tochk[3][1]+floor(tol*sin(ug));
  • tochk[4][0]=150; tochk[4][1]=0; tochk[4][2]=tochk[4][0]+floor(tol*cos(ug)); tochk[4][3]=tochk[4][1]+floor(tol*sin(ug));
  • tochk[5][0]=190; tochk[5][1]=40; tochk[5][2]=tochk[5][0]+floor(tol*cos(ug)); tochk[5][3]=tochk[5][1]+floor(tol*sin(ug));
  • tochk[6][0]=260; tochk[6][1]=40; tochk[6][2]=tochk[6][0]+floor(tol*cos(ug)); tochk[6][3]=tochk[6][1]+floor(tol*sin(ug));
  • tochk[7][0]=260; tochk[7][1]=90; tochk[7][2]=tochk[7][0]+floor(tol*cos(ug)); tochk[7][3]=tochk[7][1]+floor(tol*sin(ug));
  • tochk[8][0]=300; tochk[8][1]=130; tochk[8][2]=tochk[8][0]+floor(tol*cos(ug)); tochk[8][3]=tochk[8][1]+floor(tol*sin(ug));
  • tochk[9][0]=260; tochk[9][1]=170; tochk[9][2]=tochk[9][0]+floor(tol*cos(ug)); tochk[9][3]=tochk[9][1]+floor(tol*sin(ug));
  • tochk[10][0]=260;tochk[10][1]=220; tochk[10][2]=tochk[10][0]+floor(tol*cos(ug));tochk[10][3]=tochk[10][1]+floor(tol*sin(ug));
  • tochk[11][0]=190;tochk[11][1]=220; tochk[11][2]=tochk[11][0]+floor(tol*cos(ug));tochk[11][3]=tochk[11][1]+floor(tol*sin(ug));
  • tochk[12][0]=150;tochk[12][1]=260; tochk[12][2]=tochk[12][0]+floor(tol*cos(ug));tochk[12][3]=tochk[12][1]+floor(tol*sin(ug));
  • tochk[13][0]=110;tochk[13][1]=220; tochk[13][2]=tochk[13][0]+floor(tol*cos(ug));tochk[13][3]=tochk[13][1]+floor(tol*sin(ug));
  • tochk[14][0]=40;tochk[14][1]=220; tochk[14][2]=tochk[14][0]+floor(tol*cos(ug));tochk[14][3]=tochk[14][1]+floor(tol*sin(ug));
  • tochk[15][0]=40;tochk[15][1]=170; tochk[15][2]=tochk[15][0]+floor(tol*cos(ug));tochk[15][3]=tochk[15][1]+floor(tol*sin(ug));
Фигура в итоге построилась нормально, но следующее задание таково, что нужно применить к ней некоторые преобразования вроде матрицы поворота, где наличие координаты z обязательно.

Как это проще всего реализовать? В сети в основном с помощью OpenGL решается и т.п., мне такое не подходит)
Вопрос задан анонимно
07.11.15
1 ответ

Лучший ответ по мнению автора

Здравствуйте! Вы можете и не переходить в чистое 3d и не строить 3d фигуры, матрицы поворота и преобразования есть и в двумерном пространстве (см статью) — можете использовать однородные координаты.
Или добавить всем Вашим точкам z-координату, можно построить еще точек с другим z, чтобы потом построить полноценную 3d-фигуру и делать преобразования с ней.

Просто надо смотреть задание, какие вводные и что требуется добиться.
08.11.15
Лучший ответ по мнению автора
Посмотреть всех экспертов из раздела Технологии > C/C++
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store