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


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

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


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

示例1: shrink

Polyangle Polyangle::shrink(const double l) const
{
    int length = lesPoints.size();
    QVector<Vector2D> newPoints;
    newPoints.resize(length);

    for(int cpt = 0; cpt <length ; cpt++)
    {
        Vector2D a = lesPoints.at((cpt-1+length)%length);
        Vector2D b = lesPoints.at((cpt));
        Vector2D c = lesPoints.at((cpt+1)%length);

        Vector2D ab = b-a;
        Vector2D bc = c-b;
        Vector2D ca = c-a;

        //calcul des vecteurs orthogonaux
        Vector2D orthoAB = Vector2D(-ab.y(), ab.x());
        Vector2D orthoBC = Vector2D(-bc.y(), bc.x());

        //on l'inverse si il est dans le mauvais sens
        if(orthoAB*bc < 0)
        {
            orthoAB = -orthoAB;
        }
        if(orthoBC*ca > 0)
        {
            orthoBC = -orthoBC;
        }
        orthoAB.normalize();
        orthoBC.normalize();

        //création des droites afin de récupérer le point d'intersection
        Vector2D aPrime = a + orthoAB * l;
        Vector2D bPrime = b + orthoAB * l;
        Vector2D cPrime;
        Droite aPrimeBPrime(aPrime, bPrime - aPrime);
        bPrime = b + orthoBC * l;
        cPrime = c + orthoBC * l;
        Droite bPrimeCPrime(bPrime, cPrime - bPrime);

        aPrimeBPrime.getIntersection(bPrimeCPrime, aPrime);

        newPoints[cpt] = aPrime;
    }

    return Polyangle(newPoints);
}
开发者ID:Mythique,项目名称:M2-Generation-Ville,代码行数:48,代码来源:polyangle.cpp

示例2: handleCollisions

void Animal::handleCollisions(Environment *environment) {
    Vector2D boundsCorrection;
    if (getBounds().getMinX() < environment->getBounds().getMinX()) {
        boundsCorrection.setX(environment->getBounds().getMinX() - getBounds().getMinX());
    }
    if (getBounds().getMinY() < environment->getBounds().getMinY()) {
        boundsCorrection.setY(environment->getBounds().getMinY() - getBounds().getMinY());
    }
    if (getBounds().getMaxX() > environment->getBounds().getMaxX()) {
        boundsCorrection.setX(environment->getBounds().getMaxX() - getBounds().getMaxX());
    }
    if (getBounds().getMaxY() > environment->getBounds().getMaxY()) {
        boundsCorrection.setY(environment->getBounds().getMaxY() - getBounds().getMaxY());
    }
    translate(boundsCorrection);
    
    std::vector<Object *> nearestObjects = environment->getNearestObjects(this);
    for (int k = 0; k < nearestObjects.size(); k++) {
        Object *nearestObject = nearestObjects[k];
        double distance = getPosition().distanceTo(nearestObject->getPosition());
        double radius = (OBJECT_WIDTH / 2);
        if (distance < 2.0 * radius) {
            Vector2D overlapVector = Vector2D(nearestObject->getPosition(), getPosition());        
            overlapVector = overlapVector.normalize();
            
            double overlapLength = 2.0 * radius - distance;
            overlapVector = overlapVector.mult(overlapLength);
            
            translate(overlapVector);
            
            handleCollision(environment, nearestObject);
        }
    }
}
开发者ID:jefrsilva,项目名称:LD24Awareness,代码行数:34,代码来源:Animal.cpp

示例3: getIncircle

Polyangle Polyangle::getIncircle(int definition) const
{
    float pi = 3.14159265358979323846;
    Vector2D center = getCentre();
    QVector<Vector2D> newPoints;
    float radius = std::numeric_limits<float>::max();
    for (int i = 0; i < lesPoints.size(); i++)
    {
        Vector2D segment = (lesPoints[(i+1)%lesPoints.size()]-lesPoints[i]);
        segment.normalize();
        float scalar = (center-lesPoints[i])* segment;
        Vector2D nearestPoint = segment * scalar+lesPoints[i];
        float distance = center.distanceToPoint2D(nearestPoint);
        if (distance < radius)
            radius = distance;
    }

    for (int i=0; i < definition; i++)
    {
        float x = cos(2*pi*i/definition)*radius;
        float y = sin(2*pi*i/definition)*radius;
        newPoints << center + Vector2D(x, y);
    }

    return Polyangle(newPoints);

}
开发者ID:Mythique,项目名称:M2-Generation-Ville,代码行数:27,代码来源:polyangle.cpp

示例4: dot

inline Vector2D Vector2D::reflect(const Vector2D &other) const
{
  Vector2D n = other;
  n.normalize();
  Vector2D w = *this - n * dot(n) * 2;
  return w;
}
开发者ID:iwadon,项目名称:junk,代码行数:7,代码来源:vector_2d.hpp

示例5: cohesion

void Boid::cohesion(deque<Boid*>& neighbours) {
	Vector2D vForce;
	float neighborCount = 0;
	Vector2D vCenterOfMass;
	deque<Boid*>::iterator itBoid;
	
	for(itBoid = neighbours.begin(); itBoid != neighbours.end(); ++itBoid) {
		if(*itBoid == this) continue;	
		
		vCenterOfMass.add((*itBoid)->getVelocity());
		++neighborCount;
	}
	
	if(neighborCount > 0) {
		vCenterOfMass.devide(neighborCount);
		
		if(vCenterOfMass.distanceToSQ(getVelocity()) > 5.0f * 5.0f) {
			Vector2D vel = vCenterOfMass;
			Vector2D pos = position;
			pos.normalize();
			
			vel.subtract(pos);
			vel.subtract(getVelocity());
			vel.scale(0.1);
			
			velocity.add(vel);
		}
	}
	
	
}
开发者ID:Gerjo,项目名称:NintendoDS-Flocking,代码行数:31,代码来源:Boid.cpp

示例6: updateForce

void ParticleAttraction::updateForce(Particle *particle, real duration) {
    if (!particle->hasFiniteMass()) return;
    Vector2D force;
    particle->getPosition(&force);

    // Calculate direction from particle to force's origin
    force = origin - force;
    force.normalize();
    particle->addForce(force * magnitude * particle->getMass());
}
开发者ID:nhemmings,项目名称:tacoTruck,代码行数:10,代码来源:pfgen.cpp

示例7: makeBullet

void ZombieDefenseManager::makeBullet(const Sprite& shooter, const Sprite& target) { 	   
   Vector2D origins = shooter.getCoordinate();
   origins[0] += (shooter.getFrame()->getWidth() / 2);
   origins[1] += (shooter.getFrame()->getHeight() / 2);
   float radius = shooter.getFrame()->getWidth() / 2 + shooter.getFrame()->getHeight() / 2;
   Vector2D shoot = target.getCoordinate() - origins;
   shoot.normalize();
   origins += radius * shoot;
   bullets.push_back(Bullet(origins, shoot * game->getBulletSpeed(), fact->getFrame(bulletSurfaceString)));
}
开发者ID:yatesm,项目名称:CPSC870,代码行数:10,代码来源:zombieDefenseManager.cpp

示例8: shoot

void MediumPlane::shoot()
{
	if (Game::Instance()->isPracticeMode())
		return;

	m_target = Game::Instance()->getRandomPLayerCenter();

	if (m_enemyWeapon)
	{
		Vector2D shootDirection = m_target - (m_shootingOffset + m_position);
		shootDirection.normalize();
		Vector2D shootPosition = m_shootingOffset + m_position;
		m_enemyWeapon->shoot(shootPosition, shootDirection);
	}
}
开发者ID:GastonMontes,项目名称:Facultad,代码行数:15,代码来源:MediumPlane.cpp

示例9: getSteering

Steering* DynamicArriveSteering::getSteering()
{
	Vector2D direction = mpTarget->getPosition() - mpMover->getPosition();
	float distance = direction.getLength();

	//are we there?
	if( distance < mTargetRadius )
	{
		mLinear = gZeroVector2D;
		mAngular = 0.0f;

		return this;
	}

	float targetSpeed = 0.0f;

	//are we outside slow radius?
	if( distance > mSlowRadius )
	{
		targetSpeed = mpMover->getMaxVelocity();
	}
	else
	{
		targetSpeed = ( mpMover->getMaxVelocity() * distance ) / mSlowRadius;
	}

	//combine speed and direction to get targetVelocity
	Vector2D targetVelocity = direction;
	targetVelocity.normalize();
	targetVelocity *= targetSpeed;

	//set acceleration
	mLinear = targetVelocity - mpMover->getVelocity();
	mLinear /= mTimeToTarget;

	//check if too fast
	if( mLinear.getLength() > mpMover->getMaxAcceleration() )
	{
		//cut down to max
		mLinear.normalize();
		mLinear*= mpMover->getMaxAcceleration();
	}

	mAngular = 0.0f;

	return this;
}
开发者ID:JackOfDawn,项目名称:AI,代码行数:47,代码来源:DynamicArriveSteering.cpp

示例10: regulateSpeed

void Server::regulateSpeed(Entity *ent)
{
	float entVelX		  = ent->getPosition().getX_vel();
	float entVelY         = ent->getPosition().getY_vel();
	float entSpeedSquared = ent->getSpeedSquared();

	float entMaxSpeed     = ent->getMaxSpeed();

	//moving too fast; shorten the velocity vector to maxSpeed
	if (entSpeedSquared > entMaxSpeed * entMaxSpeed)
	{
		Vector2D oldVel = Vector2D(entVelX, entVelY);
		oldVel.normalize();
		oldVel *= entMaxSpeed;
		ent->getPosition().setX_vel(oldVel.x);
		ent->getPosition().setY_vel(oldVel.y);
	}
}
开发者ID:yixu34,项目名称:Mastrix,代码行数:18,代码来源:server.cpp

示例11: renderFeedback

void MultiDirectionalEar::renderFeedback(Object *object, Environment *environment) {
    if (object == environment->getPlayer()) {
        Vector2D windowPos = environment->getWindowPos(object->getPosition());        
        for (int i = 0; i < nearestObjects.size(); i++) {
            Object *nearestObject = nearestObjects[i];
            if (nearestObject->getVoice() && nearestObject->getVoiceInterval() <= 0.0) {
                nearestObject->resetVoiceInterval();
                Vector2D objectWindowPos = environment->getWindowPos(nearestObject->getPosition());
                Vector2D relativePos = objectWindowPos.add(windowPos.mult(-1.0));
                relativePos = relativePos.normalize();
                double pan = relativePos.getX();
                
                double nearestObjectDistance = windowPos.distanceTo(objectWindowPos);
                double gain = 1.0 - (nearestObjectDistance / 1000.0);
                if (gain < 0.0) {
                    gain = 0.0;
                }
                
                al_play_sample(nearestObject->getVoice(), gain, pan, 1.0, ALLEGRO_PLAYMODE_ONCE, NULL);
            }
        }                    
    }
}
开发者ID:jefrsilva,项目名称:LD24Awareness,代码行数:23,代码来源:MultiDirectionalEar.cpp

示例12: normalize

float Vector2D::normalizedDot(Vector2D v){
    Vector2D normedV1 = normalize();
    Vector2D normedV2 = v.normalize();
    return ( normedV1.x*normedV2.x + normedV1.y*normedV2.y );
}
开发者ID:AndreaCensi,项目名称:dvs_tracking,代码行数:5,代码来源:vector2d.cpp

示例13: main

int main() {
    Vector2D<float> v = {16,19};
    v.normalize();
    std::cout << v;
}
开发者ID:CCJY,项目名称:coliru,代码行数:5,代码来源:main.cpp


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