История изменений
Исправление Int64, (текущая версия) :
на счет if (rBot == 0 || sBot == 0) это реализация не моя, я ее взял у чувака, который реализовывал алгоритм, который мне нужен, я делаю вообще через скалярное произведение векторов, но моя функция иногда не правильно работает, попробовал эту функцию, все работает норм. Вот реализация моей функции:
bool Intersect (Edge *e, float &t) {
glm::vec2 a = v1->Pos;
glm::vec2 b = v2->Pos;
glm::vec2 c = e->v1->Pos;
glm::vec2 d = e->v2->Pos;
glm::vec2 n = glm::vec2((d-c).y, (c-d).x);
float denom = glm::dot(n, b-a);
if (denom == 0.0f)
return false;
float num = glm::dot(n, a-c);
t = -num/denom;
return true;
}
Исходная версия Int64, :
на счет if (rBot == 0 || sBot == 0) это реализация не моя, я ее взял у чувака, который реализовывал алгоритм, который мне нужен, я делаю вообще через скалярное произведение векторов, но моя функция иногда не правильно работает, попробовал эту функцию, все работает норм. Вот реализация моей функции:
bool Intersect (Edge *e, float &t) {
glm::vec2 a = v1->Pos;
glm::vec2 b = v2->Pos;
glm::vec2 c = e->v1->Pos;
glm::vec2 d = e->v2->Pos;
glm::vec2 n = glm::vec2((d-c).y, (c-d).x);
float denom = glm::dot(n, b-a);
if (denom == 0.0f) {
int aclass = ClassifyPoint(e->v1->Pos, e->v1->Pos, e->v2->Pos);
if (aclass == classify::left || aclass == classify::right)
return false;
else return false;
}
float num = glm::dot(n, a-c);
t = -num/denom;
return true;
}