Технологии

Решено

Из 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 решается и т.п., мне такое не подходит)

Вопрос задан анонимно ноябрь 7, 2015 г.

  • Всего ответов: 1

  • Виталий - аватарка

    Виталий

    2-й в Технологиях

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

    Просто надо смотреть задание, какие вводные и что требуется добиться.

    ноябрь 8, 2015 г.
    Ответ понравился автору
    Лучший ответ по мнению автора

Похожие вопросы

замена слова.

март 29, 2012 г.

Технологии

Динамическая строка

январь 2, 2014 г.

Технологии