Как преобразовать цилиндрическую проекцию в печатную квартиру с икосаэдром? - PullRequest
0 голосов
/ 01 марта 2020

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

Каждая вершина икосаэдра соответствует широте и долготе, и я могу четко найти соответствующий пиксель на карте. Что я не понимаю, так это как интерполировать между точками по краям треугольника и интерполировать в треугольнике. Я мог бы просто сделать какую-то линейную интерполяцию типа Гуро для краев, а затем вдоль линий сканирования, но есть ли уже что-то оптимальное?

Код ниже будет правильным для вертикальных линий или параллельным экватору , но для чего-либо под углом, линейный не правильно. Для икосаэдра каждый треугольник покрывает большую область сферы, и это, кажется, слишком большая ошибка.

interpLine(lat1,lon1, x1,y1, lat2,lon2, x2,y2) {
    d = dist(x1,y1,x2,y2);
    for (float i = 0; i <= d; i++)
      float f = i/d;
      lat = lat1 * (1-f) + lat2 * f;
      lon = lon1 * (1-f) + lon2 * f;
      x = x1 * (1-f) + x2 * f;
      y = y1 * (1-f) + y2 * f;
      // set the color to whatever it should be for (lat,lon)
   }

interpolate(lat1,lon1, lat2,lon2, lat3,lon3,   x1,y1, x2,y2, x3,y3) {

}
...