Войти
ПрограммированиеФорумОбщее

Попинайте код (4 стр)

Страницы: 1 2 3 4
#45
11:57, 27 сен 2012

решил проблему с реаллокациями:

XMFLOAT33  sepAxis[100500];

#46
13:08, 27 сен 2012

проверьте, пожалуйста, вот этот код на кошерность:

+ Показать
#47
13:28, 27 сен 2012

По мне, так фигурных скобок многовато, а пробелов между абзацами маловато.

{
  uSepAxisCount = mesh->dwFaceCount;
  for (int i = 0; i < mesh->dwFaceCount; ++i)
    sepAxis[i] = mesh->faces[i].normal; //переписываем нормали первого объекта в массив разделяющих осей

  for (int i = 0; i < targetNode.mesh->dwFaceCount; ++i)
  if (!findSeparatingAxe(targetNode.mesh->faces[i].normal)) //если такого вектора еще нет среди разделяющих осей
  {
    sepAxis[uSepAxisCount] = targetNode.mesh->faces[i].normal; //добавляем
    uSepAxisCount++;
  }

  for (VertexVector::iterator j = mesh->separatingAxis->begin(); j != mesh->separatingAxis->end(); ++j) //перебираем ребра первого
  for (VertexVector::iterator i = targetNode.mesh->separatingAxis->begin(); i != targetNode.mesh->separatingAxis->end(); ++i) // и второго объекта
  {
    XMFLOAT33 axe = Normalize33(*j ^ *i); //перемножаем векторно ребра
    if (!findSeparatingAxe(axe)) // если такой разделяющей оси еще нет
    {
      sepAxis[uSepAxisCount] = axe; // добавляем
      uSepAxisCount++;
    }
  }

}

И в переборе классически первый индекс - номер строки (j), второй - положение в строке (i)

#48
13:43, 27 сен 2012

TarasB
> И в переборе классически первый индекс - номер строки (j), второй - положение в
> строке (i)
>
то есть вот так будет
for (j)
  for (i)
    a[j] i]  ?

нашел, кстати, несколько косяков в своем же алгоритме: в первом цикле не проверяются нормали на принадлежность одно прямой, во втором цикле не учитывается, что нормали могут быть на одной прямой, но с разными знаками, в третьем цикле не учитывается инверсное направление осей и не обработан вариант, когда векторное произведение стремится к 0

#49
14:38, 27 сен 2012

Gringosol
> то есть вот так будет

Вообще да.
Главное следи, чтобы во внутреннем цикле второй индекс менялся, а не первый. Чтобы при переходе во внутреннем цикле указатель смещался как можно ближе.

Страницы: 1 2 3 4
ПрограммированиеФорумОбщее

Тема в архиве.