Существует множество цилиндрических проекций планет, доступных для наложения текстуры на сферу. Но если я хочу напечатать икосаэдр, который можно вырезать, как это изменится?
Каждая вершина икосаэдра соответствует широте и долготе, и я могу четко найти соответствующий пиксель на карте. Что я не понимаю, так это как интерполировать между точками по краям треугольника и интерполировать в треугольнике. Я мог бы просто сделать какую-то линейную интерполяцию типа Гуро для краев, а затем вдоль линий сканирования, но есть ли уже что-то оптимальное?
Код ниже будет правильным для вертикальных линий или параллельным экватору , но для чего-либо под углом, линейный не правильно. Для икосаэдра каждый треугольник покрывает большую область сферы, и это, кажется, слишком большая ошибка.
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) {
}