Я боролся с этой проблемой вчера, и я думаю, что у меня есть решение. Оказывается, в общем, если вы хотите быть очень подробным, с каким краем и каким цветом, вы должны быть очень хитрыми.
Чтобы вы поняли, в чем проблема, я сначала расскажу, как команда trimesh (Tri, X, Y, Z, C) назначает цвета в первую очередь. Аргумент C должен быть вектором чисел с длиной, равной количеству вершин (не ребер). То, как он окрашивает края, выглядит следующим образом. Если у нас есть 4 вершины и мы присваиваем
Три = [1 2 3; 3 2 4]
и
C = [10 20 30 40]
тогда первое ребро, найденное в Tri, имеет значение от 1 до 2, и оно окрашено с использованием цвета точки 1, равного 10. Следующее найденное ребро имеет значение от 2 до 3, которое окрашено с использованием цвета точки 2, т.е. 20. Следующее ребро 3 к 1, у которого есть цвет 30. Следующее ребро 3 к 2 с цветом 30; обратите внимание, что этот край уже окрашен в 20, но этот новый цвет заменяет старый. А затем края 2-4 окрашены в 20, а края 4–3 окрашены в 40.
Проблема в том, что без использования специального трюка, эта схема раскраски может сделать буквально невозможным окрашивать края точно так, как вы хотите. Ваш пример: если у вас больше ребер, чем вершин (как в моем примере), и вы хотите, чтобы каждое ребро было окрашено по-разному, вам не повезло, потому что ребра окрашены в соответствии с цветами, назначенными вершинам . Но если мы сделаем несколько копий каждой вершины (и, следовательно, несколько копий каждого ребра), то мы вернемся к делу. Кроме того, наша жизнь упрощается благодаря тому, что Tri принимает не только лица, но и отдельные края.
В качестве примера того, что я имею в виду, предположим, что вы хотели, чтобы края 2–3 имели цвет 50 в примере выше. Для этого создайте новую точку, точку 5, которая совпадает с точкой 2 (то есть те же координаты (x, y, z)). Переопределите Tri и C следующим образом:
Три = [1 2 3; 3 2 4; 3 5 3]
C = [10 20 30 40 50]
Обратите внимание, что последние три числа в Tri не определяют грань, а скорее ребро (ребро от 3 до 5, что совпадает с 2 до 3). Этот край будет окрашен любой цветовой точкой 5. Таким образом, вы можете перезаписать цвета каждого края в отдельности. Просто убедитесь, что эти края помещены в конец матрицы Tri, чтобы их окраски переписывали любые предыдущие нежелательные окраски. Если вы не заботитесь о заполнении граней, вы можете даже иметь матрицу Tri только с ребрами. Это немного взломать, но это работает.