当前位置: 首页>>代码示例>>C++>>正文


C++ ConvexPolygon::addPoint方法代码示例

本文整理汇总了C++中ConvexPolygon::addPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ ConvexPolygon::addPoint方法的具体用法?C++ ConvexPolygon::addPoint怎么用?C++ ConvexPolygon::addPoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ConvexPolygon的用法示例。


在下文中一共展示了ConvexPolygon::addPoint方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: test

void ConvexPolygon::test()
{
	ConvexPolygon polyA;
	ConvexPolygon polyB;

	polyA.addPoint(cv::Point2f(1.2647, 0.737144));
	polyA.addPoint(cv::Point2f(1.09702, 2.24956));
	polyA.addPoint(cv::Point2f(0.6286, 2.28678));
	polyA.addPoint(cv::Point2f(0.505286, 2.26628));
	polyA.addPoint(cv::Point2f(0.390494, 2.11702));
	polyA.addPoint(cv::Point2f(0.300014, 1.97472));
	polyA.addPoint(cv::Point2f(0.145461, 1.70306));
	polyA.addPoint(cv::Point2f(0.0566236, 0.907763));
	polyA.addPoint(cv::Point2f(0.0161411, 0.400278));
	polyA.addPoint(cv::Point2f(0.00799566, 0.209088));
	polyA.addPoint(cv::Point2f(0, 0));
	polyA.addPoint(cv::Point2f(0.669949, 0.375082));

	polyB.addPoint(cv::Point2f(1.45802, 0.24155));
	polyB.addPoint(cv::Point2f(1.2647, 0.737144));
	polyB.addPoint(cv::Point2f(0.724684, 0.74934));
	polyB.addPoint(cv::Point2f(0.582521, 0.742624));
	polyB.addPoint(cv::Point2f(0.450183, 0.693712));
	polyB.addPoint(cv::Point2f(0.345872, 0.647083));
	polyB.addPoint(cv::Point2f(0.167695, 0.558064));
	polyB.addPoint(cv::Point2f(0.0652787, 0.297459));
	polyB.addPoint(cv::Point2f(0.0186083, 0.131165));
	polyB.addPoint(cv::Point2f(0.00921783, 0.0685148));
	polyB.addPoint(cv::Point2f(0, 0));
	polyB.addPoint(cv::Point2f(0.772354, 0.122908));

	ConvexPolygon polyC = polyA.intersect(polyB);

	polyA.print("A");
	polyB.print("B");
	polyC.print("C");
}
开发者ID:tiagojc,项目名称:IBTSFIF,代码行数:37,代码来源:convexpolygon.cpp

示例2: intersect

ConvexPolygon ConvexPolygon::intersect(const ConvexPolygon& poly) const
{
	ConvexPolygon result;

	int a = 0;
	int b = 0;

	int aa = 0;
	int ba = 0;

	enum State {IN_A, IN_B, UNKNOWN};
	State state = UNKNOWN;

	bool firstPoint = true;

	do {
		const int a1 = (a + m_vertices.size() - 1) % m_vertices.size();
		const int b1 = (b + poly.vertices().size() - 1) % poly.vertices().size();

		const cv::Point2f vecA = m_vertices[a] - m_vertices[a1];
		const cv::Point2f vecB = poly.vertices()[b] - poly.vertices()[b1];

		const float cross = signedArea2(cv::Point2f(0, 0), vecA, vecB);
		const float aHB = signedArea2(poly.vertices()[b1], poly.vertices()[b], m_vertices[a]);
		const float bHA = signedArea2(m_vertices[a1], m_vertices[a], poly.vertices()[b]);

		//std::cout << "cross=" << cross << ", aHB=" << aHB << ", bHA=" << bHA << std::endl;

		std::vector<cv::Point2f> intersectionPoints;
		LineSegment::IntersectResult intersectResult = LineSegment(m_vertices[a1], m_vertices[a]).intersect(LineSegment(poly.vertices()[b1], poly.vertices()[b]), intersectionPoints);

		if (intersectResult == LineSegment::INTERESECTING) {
			if (firstPoint && state == UNKNOWN) {
				aa = 0;
				ba = 0;
				firstPoint = false;
			}

			if (aHB > 0) {
				state = IN_A;
			} else if (bHA > 0) {
				state = IN_B;
			}

			assert(intersectionPoints.size() > 0);
			result.addPoint(intersectionPoints[0]);
		}

		if ((intersectResult == LineSegment::COINCIDENT) && (intersectionPoints.size() > 0) && (vecA.dot(vecB) < 0)) {
			result = ConvexPolygon(intersectionPoints);
			return result;
		}

		if ((std::abs(cross) <= std::numeric_limits<float>::epsilon()) && (std::abs(aHB) <= std::numeric_limits<float>::epsilon()) && (std::abs(bHA) <= std::numeric_limits<float>::epsilon())) {
			if (state == IN_A) {
				ba++;
				b = (b + 1) % poly.vertices().size();
			} else {
				aa++;
				a = (a + 1) % m_vertices.size();
			}
		} else if ((std::abs(cross) <= std::numeric_limits<float>::epsilon()) && (aHB < 0) && (bHA < 0)) {
			std::cout << "III" << std::endl;
			result.clear();
			return result;
		} else if (cross >= 0) {
			if (bHA > 0) {
				if (state == IN_A) {
					result.addPoint(m_vertices[a]);
				}
				aa++;
				a = (a + 1) % m_vertices.size();
			} else {
				if (state == IN_B) {
					result.addPoint(poly.vertices()[b]);
				}
				ba++;
				b = (b + 1) % poly.vertices().size();
			}
		} else {
			if (aHB > 0) {
				if (state == IN_B) {
					result.addPoint(poly.vertices()[b]);
				}
				ba++;
				b = (b + 1) % poly.vertices().size();
			} else {
				if (state == IN_A) {
					result.addPoint(m_vertices[a]);
				}
				aa++;
				a = (a + 1) % m_vertices.size();
			}
		}

		//std::cout << "a=" << a << ", b=" << b << ", aa=" << aa << ", ba=" << ba << ", state=" << state << std::endl;
	} while (((aa < (int)m_vertices.size()) || (ba < (int)poly.vertices().size())) && (aa < 2 * (int)m_vertices.size()) && (ba < 2 * (int)poly.vertices().size()));

	return result;
}
开发者ID:tiagojc,项目名称:IBTSFIF,代码行数:100,代码来源:convexpolygon.cpp

示例3:

PlayerBehaviours::PlayerBehaviours()
{
    baseSpeed = 100.0;
    facing = "d";

    //roll properties

    startRoll = false;
    rolling = false;
    rollCooled = true;
    rollDuration = 0.5;
    rollCooldown = 0.5;
    rollBoost = 2.5;

    //set the attack area polygons

    attackScaleFactor = 2.0F;

    ConvexPolygon c;

    c.addPoint(6,-12);
    c.addPoint(20,-30);
    c.addPoint(25,-20);
    c.addPoint(10,-8);

    attackFrames.push_back(c);
    c.clearPoints();

    c.addPoint(10,-8);
    c.addPoint(25,-20);
    c.addPoint(30,0);
    c.addPoint(12,0);

    attackFrames.push_back(c);
    c.clearPoints();

    c.addPoint(12,0);
    c.addPoint(30,0);
    c.addPoint(25,20);
    c.addPoint(10,8);

    attackFrames.push_back(c);
    c.clearPoints();

    c.addPoint(10,8);
    c.addPoint(25,20);
    c.addPoint(20,30);
    c.addPoint(6,12);


    attackFrames.push_back(c);
    c.clearPoints();

    //set the attack properties

    attackDuration = 0.15;
    attackCooldown = 0.05;
    startAttack = false;
    attackCooled = false;
    attacking = false;
    attackMom = 2000;
}
开发者ID:The-Cunning-Folk,项目名称:plemora,代码行数:62,代码来源:playerbehaviours.cpp


注:本文中的ConvexPolygon::addPoint方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。