LINUX.ORG.RU

История изменений

Исправление 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;
	}