本文整理汇总了C++中QVector2D::normalize方法的典型用法代码示例。如果您正苦于以下问题:C++ QVector2D::normalize方法的具体用法?C++ QVector2D::normalize怎么用?C++ QVector2D::normalize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QVector2D
的用法示例。
在下文中一共展示了QVector2D::normalize方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _Climb
void OGClimb::_Climb()
{
QVector2D dv = position - pImpl_->pBody->GetPosition();
dv.normalize();
QVector2D vs = speed * 3 * dv;
pImpl_->pBody->SetVelocity(vs);
}
示例2: updateShape
void StraightDoubleEdge::updateShape()
{
prepareGeometryChange();
// calculate the perpendicular edge offset
QVector2D direction = QVector2D(m_endPoint - m_startPoint);
direction.normalize();
QPointF offset = QPointF(-direction.y(), direction.x()) * s_width;
// update the path
QPainterPath doubleLine;
doubleLine.moveTo(m_startPoint + offset);
doubleLine.lineTo(m_endPoint + offset);
doubleLine.moveTo(m_startPoint - offset);
doubleLine.lineTo(m_endPoint - offset);
m_path.swap(doubleLine);
// update the arrow
placeArrowAt(.5);
}
示例3: onTargetChanged
void OGClimb::onTargetChanged()
{
if (!isNewTarget)
{
//get ball distance from origin
float dist = (pImpl_->pBody->GetPosition() - (origin + originCorrection)).length();
//calculate and normalize the new path
QVector2D nv = position - (origin + originCorrection);
nv.normalize();
//multiply the new path with the distance
nv*=dist;
//place ball to the path
pImpl_->pBody->body->SetTransform(b2Vec2((origin+originCorrection + nv).x(),(origin+originCorrection + nv).y()),pImpl_->pBody->body->GetAngle());
} else {
isNewTarget=false;
}
}
示例4: na
/* draw an angle from the current point to b and then to c,
* with a rounded corner of the given radius.
*/
void
KeyboardLayoutWidget::roundedCorner (QPainterPath& path,
QPointF b, QPointF c, double radius)
{
/* we may have 5 point here
* a is the current point
* c is the end point
* and b is the corner
* we will have a rounded corner with radious (maybe adjust by a,b,c position)
*
* a1 is on a-b, and c1 is on b-c
*/
QPointF a = path.currentPosition();
//qDebug() << "current" << a << b << c;
/* make sure radius is not too large */
double dist1 = distance (a, b);
double dist2 = distance (b, c);
//qDebug() << "dist" << dist1 << dist2 << radius;
radius = qMin (radius, qMin (dist1, dist2));
QPointF ba = a - b;
QPointF bc = c - b;
QVector2D na(ba);
QVector2D nc(bc);
na.normalize();
nc.normalize();
qreal cosine = QVector2D::dotProduct(na, nc);
qreal halfcosine = qSqrt((1 + cosine) / 2);
qreal halfsine = qSqrt( 1- halfcosine * halfcosine);
qreal halftan = halfsine / halfcosine;
QPointF a1 = b + na.toPointF() * (radius / halftan);
QPointF c1 = b + nc.toPointF() * (radius / halftan);
QVector2D n = na + nc;
n.normalize();
QPointF ctr = b + n.toPointF() * radius / halfsine;
QRectF arcRect(ctr.x() - radius, ctr.y() - radius, 2 * radius, 2 * radius);
qreal phiA, phiC;
//qDebug() << c1 << ctr << a1;
QVector2D ctra = QVector2D(a1 - ctr);
QVector2D ctrc = QVector2D(c1 - ctr);
ctra.normalize();
ctrc.normalize();
phiA = angle(ctra);
phiC = angle(ctrc);
qreal delta = phiC - phiA;
while (delta > 0)
delta -= 360;
while (delta < -360)
delta += 360;
if (delta <- 180)
delta += 360;
//qDebug() << arcRect << ctra << ctrc << ctr << "degree" << phiA << phiC;
path.lineTo(a1);
path.arcTo(arcRect, phiA, delta);
path.lineTo(c1);
path.lineTo(c);
}
示例5: addMeshFromEdge
/**
* Add a mesh for the specified edge.
*/
void RoadGraph::addMeshFromEdge(RenderablePtr renderable, RoadEdgePtr edge, float widthBase, QColor color, float height) {
Vertex v;
// define the width of the road segment
float width;
switch (edge->type) {
case RoadEdge::TYPE_HIGHWAY:
width = widthBase * 2.0f;
break;
case RoadEdge::TYPE_BOULEVARD:
case RoadEdge::TYPE_AVENUE:
width = widthBase * 1.5f;
break;
case RoadEdge::TYPE_STREET:
width = widthBase * 1.0f;
break;
}
int num = edge->polyline.size();
// draw the edge
for (int i = 0; i < num - 1; ++i) {
QVector2D pt1 = edge->polyline[i];
QVector2D pt2 = edge->polyline[i + 1];
QVector2D vec = pt2 - pt1;
vec = QVector2D(-vec.y(), vec.x());
vec.normalize();
QVector2D p0 = pt1 + vec * width * 0.5f;
QVector2D p1 = pt1 - vec * width * 0.5f;
QVector2D p2 = pt2 - vec * width * 0.5f;
QVector2D p3 = pt2 + vec * width * 0.5f;
v.color[0] = color.redF();
v.color[1] = color.greenF();
v.color[2] = color.blueF();
v.color[3] = color.alphaF();
v.normal[0] = 0.0f;
v.normal[1] = 0.0f;
v.normal[2] = 1.0f;
v.location[2] = height;
v.location[0] = p0.x();
v.location[1] = p0.y();
renderable->vertices.push_back(v);
v.location[0] = p1.x();
v.location[1] = p1.y();
renderable->vertices.push_back(v);
v.location[0] = p2.x();
v.location[1] = p2.y();
renderable->vertices.push_back(v);
v.location[0] = p0.x();
v.location[1] = p0.y();
renderable->vertices.push_back(v);
v.location[0] = p2.x();
v.location[1] = p2.y();
renderable->vertices.push_back(v);
v.location[0] = p3.x();
v.location[1] = p3.y();
renderable->vertices.push_back(v);
}
}