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


C++ Vector2D::Magnitude方法代码示例

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


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

示例1: GetTangentialVelocity

	Vector2D Surface::GetTangentialVelocity( Vector2D velocityTowardsSurface )
	{
		/* We need to find the projection of the velocity vector in the direction of the surface vector. To start, we'll 
		   need to compute the surface vector in both directions. We'll use the dot product to find the angle between each 
		   of them, and use the one with the smaller angle for the remaining calculation, since we know the angle between 
		   surface and velocity should be between 0 and 90. */
		Vector2D surfaceVector1 = _surfaceEdge._point1 - _surfaceEdge._point2;
		Vector2D surfaceVector2 = _surfaceEdge._point2 - _surfaceEdge._point1;

		/* Use the dot product to get the angle between velocity and surface for each surface vector and save minimum angle */
		float angle1 = acos( ( velocityTowardsSurface * surfaceVector1 ) / ( velocityTowardsSurface.Magnitude() * surfaceVector1.Magnitude() ) );
		float angle2 = acos( ( velocityTowardsSurface * surfaceVector2 ) / ( velocityTowardsSurface.Magnitude() * surfaceVector2.Magnitude() ) );

		float finalAngle = 0;
		Vector2D projectionUnitVector;
		if( angle1 < angle2 )
		{
			finalAngle = angle1;
			projectionUnitVector = surfaceVector1.UnitVector();
		}
		else
		{
			finalAngle = angle2;
			projectionUnitVector = surfaceVector2.UnitVector();
		}
		
		float projectionMagnitude = velocityTowardsSurface.Magnitude() * cos( finalAngle );

		return projectionUnitVector * projectionMagnitude;
	}
开发者ID:Jerorfigan,项目名称:Stick-Figure,代码行数:30,代码来源:Surface.cpp

示例2: Normal

Vector2D Vector2D::Reflect(const Vector2D & v, const Vector2D &a) {
	Vector2D n = Normal(a);
	float co = -2 * ((float)v.Dot(n) / (n.Magnitude() * n.Magnitude()));
	Vector2D r = {};
	r.x = v.x + co * n.x;
	r.y = r.y + co * n.y;
	return r;
}
开发者ID:SimpleManGames,项目名称:DirectEngine,代码行数:8,代码来源:Vector2D.cpp

示例3:

TEST(vec2d, mag)
{
	Vector2D testingVector;
	testingVector.x = 3;
	testingVector.y = 8;
	float magTest = testingVector.Magnitude();
	EXPECT_FLOAT_EQ(8.54400374532, magTest);
}
开发者ID:BryceX,项目名称:3rd-Project-Library,代码行数:8,代码来源:GTEST.cpp

示例4: acos

float Vector2D::BetweenAngle(Vector2D &Vector){
	float fResult;
	fResult = DotProduct(Vector);
	fResult /= Magnitude() * Vector.Magnitude();
	return acos(fResult)*180/3.14f;
}
开发者ID:BownDown,项目名称:2DGameEngineGL,代码行数:6,代码来源:Vector.cpp

示例5: Update

void World::Update(const float time_delta) {
	mCurrentLevelTime += time_delta;
	// INPUT!
	const sf::Input& in = GameApp::get_mutable_instance().GetInput();
	sf::View& view = GameApp::get_mutable_instance().GetView();
	if(GameApp::get_mutable_instance().IsEditorMode()) {
		float px = 10;
		if(in.IsKeyDown(sf::Key::LShift) || in.IsKeyDown(sf::Key::RShift)) {
			px *= 5;
		}
		if(in.IsKeyDown(sf::Key::Up)) {
			view.SetCenter(view.GetCenter().x, view.GetCenter().y - px);
		}
		if(in.IsKeyDown(sf::Key::Down)) {
			view.SetCenter(view.GetCenter().x, view.GetCenter().y + px);
		}
		if(in.IsKeyDown(sf::Key::Left)) {
			view.SetCenter(view.GetCenter().x - px, view.GetCenter().y);
		}
		if(in.IsKeyDown(sf::Key::Right)) {
			view.SetCenter(view.GetCenter().x + px, view.GetCenter().y);
		}

		Coordinates mp;
		mp.SetScreenPixel(GameApp::get_mutable_instance().GetMousePosition());
		if(mEditorMouseAction == EMA_GRAB) {
			mEditorMouseActionEntity->SetPosition( mEditorMouseActionStartEntityPosition.GetWorldFloat() +
												   mp.GetWorldFloat() -
												   mEditorMouseActionStartMousePosition.GetWorldFloat() );
		} else if(mEditorMouseAction == EMA_ALPHA) {
			float mpf = mp.GetScreenFloat().y;
			float mspf = mEditorMouseActionStartMousePosition.GetScreenFloat().y;
			float d = (mspf - mpf) * 5.f;
			float a = mEditorMouseActionStartEntityAlpha + d;
			if (a > 1) a = 1;
			if (a < 0) a = 0;
			mEditorMouseActionEntity->SetAlpha( a );
		} else if(mEditorMouseAction == EMA_SCALE) {
			Vector2D md = mEditorMouseActionStartEntityPosition.GetScreenPixel() - mp.GetScreenPixel();
			Vector2D sd = mEditorMouseActionStartEntityPosition.GetScreenPixel() - mEditorMouseActionStartMousePosition.GetScreenPixel();
			float f =  md.Magnitude() / sd.Magnitude();
			mEditorMouseActionEntity->SetScale( mEditorMouseActionStartEntityScale * f );
		} else if(mEditorMouseAction == EMA_ROTATE) {
			Coordinates ep;
			ep.SetWorldFloat(mEditorMouseActionEntity->GetPosition());
			mEditorMouseActionEntity->SetRotation(
					(mEditorMouseActionStartMousePosition.GetWorldFloat()-ep.GetWorldFloat()).Rotation()
					-(mp.GetWorldFloat()-ep.GetWorldFloat()).Rotation()
					+ mEditorMouseActionStartEntityRotation );
		}
	} else if(GameApp::get_mutable_instance().GetAppMode() == AM_PUZZLE) {
		// draw point on closest rail
		Rail* r = GetClosestRail();
		if(r != NULL) {
			Coordinates tmp;
			tmp.SetScreenPixel(GameApp::get_mutable_instance().GetMousePosition());
			float d = r->ClosestPositionOnLine(tmp.GetWorldFloat());
			mClosestRailPoint = r->GetPointFromFloat(d);
		}
		mClosestRail = r;

	}
	if(GetBoxEntity() != NULL && GetBoxEntity()->UsesPhysics() && !GameApp::get_mutable_instance().GetInput().IsMouseButtonDown(sf::Mouse::Left)) {
		mCurrentRail = GetClosestRail(true, GetBoxEntity()->GetBody()->getWorldTransform().getOrigin());
	}

	//mDynamicsWorld->stepSimulation(time_delta, 10);
	if(GameApp::get_mutable_instance().GetAppMode() == AM_PLAY) {
		mDynamicsWorld->stepSimulation(1 / 60.f, 10);
		mDynamicsWorld->clearForces();
	}

	Entity* c = GetClosestEntityOnLayer(GameApp::get_mutable_instance().GetMousePosition(), mEditorLayer);
	BOOST_FOREACH(Entity& entity, mEntities) {
		int h = 0;
		if (mEditorSelectedEntity == &entity) h = 2;
		else if (c == &entity) h = 1;
		entity.SetHighlightMode(h);
		entity.Update(time_delta);
		/*if(entity.GetLifeTime() >= entity.GetTimeToLive()) {
			mDynamicsWorld->removeRigidBody(entity.GetBody().get());
			mEntities.erase_if(boost::bind(&Entity::GetUID, _1) == entity.GetEntityUniqueId());
		}*/
	}
开发者ID:frankier,项目名称:gamejam,代码行数:84,代码来源:World.cpp


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