Есть такая задачка: Имеется набор 3D точек (x,y,z) и их триангуляция. Эту триангуляцию рассекают набором горизонтальных плоскостей (z=const), в результате получаем набор изолиний и изоконтуров для каждого z=(z1,...,zn). (представьте, что строится карта скажем температур для нашей необъятной родины) теперь хочется _красиво_ отобразить все это дело на 2D карте. можно конечно просто отрисовать все полученный изолинии/изоконтуры через Polyline, но получается угловато. посему хочется прикрутить сюда какие нибудь кривые (типа Безье или еще кого). и вот тут меня мучает вопрос - как сделать так, чтобы при аппроксимации изолиний кривыми и их отрисовке они не наползали друг на друга? кто знает, подскажите в какую сторону вообще копать, т.к. с кривыми никогда не работал
Max Поясни пожалуйста что значит "не наползали друг на друга". В смысле получившаяся кривая не должна пересекать саму себя?
Stiver В смысле получившаяся кривая не должна пересекать саму себя? нее, не то. если говорить о карте высот, то есть две соседних изолинии, скажем 100 и 200 метров (каждая из них представлена набором точек). при отрисовке изолинии сплайном, этот сплайн будет проходить между двумя соседними точками не по прямой (иначе получится отрезок), а с некоторым изгибом (на то они и сплайны). величина этого "изгиба" задается коэффициентами сплайна. так вот, может получиться такой "изгиб", что он налезет на проходящую рядом (соседнюю) изолинию.
Max Общего решения скорее всего не существует. Можно делать "вручную": взять tension splines и при пересечении увеличивать натяжение пока не станет красиво. Можно локально увеличить количество точек. На самом деле не думаю, что вероятность пересечения такая уж большая: у проходящих рядом сплайнов будут похожие характеристики(коэффициенты), а значит и изгибаться они будут одинаково.
Max Может тебе попытаться избавиться от угловатости этапом раньше? Углы появляются в точках разреза рёбер, режешь ты по глубине, а глубина по треугольнику интерполируется линейно, так что эту угловатость можно считать артефактом линейной интерполяции. Очевидно, если сгладить исходный меш, то и углов должно стать меньше. Допускает ли твоя задача приведение к плоскому растру? В таком случае, можно было бы получить два преимущества: во-первых, вместо сложных алгоритмов построения сплайна по базовому каркасу в 3д (если они вообще такие есть, пригодные для твоего случая) использовать значительно более простые алгоритмы построения карты высот, и, во-вторых, можно было бы выбирать детализацию исходя из физического размера изображения, а, при желании, довести масштаб до попиксельного и вообще отказаться от выделения контуров в виде координат точек - сразу использовать полученный растр для отрисовки.