2016-04-01 71 views
5

Я пытаюсь нарисовать линии со смещением к основной линии, как на вложении. enter image description hereСмещение линии (параллельные линии) без точек возврата

У меня проблемы с кодом. Он создает пересечения и точки возврата на линиях. (Приложение)

enter image description here

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

// LEFT SIDE OF MAIN LINE 
    int numberOfLines = 10; 
    float offset = 10f; 
    lastLinePoints = outerPoints; // outerPoint = Points from Main Line 
    for(int i = 0; i < numberOfLines; i++) 
    { 
     List<Vector3> tempPoints = new List<Vector3>(); 
     for (int k = 0; k < lastLinePoints.Count; k++) { 
      if (k + 1 < lastLinePoints.Count) { 
       Vector3 direction = lastLinePoints [k + 1] - lastLinePoints [k]; 
       // up direction: 
       Vector3 up = new Vector3(0.0f, 1.0f, 0.0f); 
       // find right vector: 
       Vector3 right = Vector3.Cross(direction.normalized, up.normalized); 
       Vector3 newPoint = lastLinePoints [k] + (right * offset); 
       tempPoints.Add (newPoint); 
      } 


     } 
     VectorLine lineTemp = new VectorLine ("lineCurved", tempPoints, 120f/_camera2DObject.GetComponent<Camera>().orthographicSize, LineType.Continuous); 
     lineTemp.Draw3D(); 
     lastLinePoints = tempPoints; 

    } 

После некоторых исследований я знаю, что решение для рисования изогнутых параллельных линий может быть затруднено. Я нашел также некоторые алгоритмы (https://hal.inria.fr/inria-00518005/document), но эта математика для меня трудно сделать код.

После предложения от @jstreet я попробовал библиотеку CLIPPER. Результаты очень хорошие, но это можно сделать только параллельную линию вместо замкнутого многоугольника вокруг линии (как на вложении) enter image description here

UPDATE

Я написал еще один вопрос becouse я думаю, что использование CLIPPER для параллельных линий стоит , LINK TO question

enter image description here

+0

Можете ли вы представить полный пример того, что вы делаете? Так что он на самом деле рисует линии из вашего прикрепленного изображения. – Evk

+0

Этот код фактически рисует эти строки, кроме первого. Первые однострочные точки указаны в списке внешних точек . Я думаю, что здесь не нужно прикладывать список с сотнями баллов – seek

+0

И какую библиотеку вы используете для рисования? – Evk

ответ

0

из моего предыдущего опыта, много времени будет потрачено, чтобы решить вашу проблему без применения полилинию кривые смещения алгоритма, поэтому мой совет приступить к реализации любого из алгоритмов независимо математические трудности. выберите один из опубликованных алгоритмов, который соответствует именно вашему делу, это может быть проще, чем реализовать алгоритм для любой формы. Но вы можете получить ниже ссылку выстрела https://github.com/skyrpex/clipper

+0

Пожалуйста, прочтите мой обновленный вопрос. Я использую CLIPPER, но без каких-либо хороших результатов. Clipper не может делать смещение по пути, но не может выполнять простую параллельную линию, и я не знаю, как изменить клиппер, чтобы сделать это:/ – seek

0
  1. расчета параметров параллельной линии: вам нужно будет вычислить смещение в качестве коэффициента (угла) остается тем же самым.
  2. рассчитать пересечения линий между соседними линиями на основе вычисленных значений с этапа 1.
  3. использовать сплайны по последовательным наборам из трех точек пересечения. Для сплайнов вы можете использовать любую кубическую сплайн-библиотеку, есть много в guthub (https://gist.github.com/dreikanter/3526685) или codeproject (http://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation).
+0

Пожалуйста, прочтите мой обновленный вопрос. Я использую CLIPPER, но без каких-либо хороших результатов. Clipper не может делать смещение по пути, но не может выполнять простую параллельную линию, и я не знаю, как изменить клиппер, чтобы сделать это:/ – seek

+0

Обновлено, чтобы избежать использования CLIPPER. –

Смежные вопросы