Esempio n. 1
0
void Map::CalcBetaSkeletonHeightmap(float gamma, Heightmap &map) {
	int size = towns.size();
	bool hasATownInBetaSkeleton = false;
	const float step_y = 0.1f;
	int cmp = 0;
	for (int a = 0; a < size; ++a)
	{
		for (int b = cmp; b < size; ++b)
		{
			if (a == b) continue;
			bool hasATownInBetaSkeleton = false;
			for (int p = 0; p < size; ++p)
			{
				if (p != a && p != b && IsInBetaSkeletonHeightmap(towns[p], towns[a], towns[b], gamma, map))
				{
					hasATownInBetaSkeleton = true;
				}
			}
			if (!hasATownInBetaSkeleton)
			{
				waysPoints.push_back(towns[a]);
				waysPoints.push_back(towns[b]);
				waysCost.push_back(map.getDistance(towns[a], towns[b]));
				waysEdges.push_back(Vector2d(waysPoints.size() - 2, waysPoints.size() - 1));
			}
		}
		++cmp;
	}
}
Esempio n. 2
0
bool Map::IsInMoonBetaSkeletonHeightmap(const Vector2d & p, const Vector2d & a, const Vector2d & b, float gamma, Heightmap &map) {
	float distAP = map.getDistance(a, p);
	float distBP = map.getDistance(b, p);
	float distAB = map.getDistance(a, b);
	return std::abs(std::pow(distAP, gamma) + std::pow(distBP, gamma) - std::pow(distAB, gamma)) < 1.f;
}