本文整理汇总了C#中System.Line.GetNormalisedVector方法的典型用法代码示例。如果您正苦于以下问题:C# Line.GetNormalisedVector方法的具体用法?C# Line.GetNormalisedVector怎么用?C# Line.GetNormalisedVector使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Line
的用法示例。
在下文中一共展示了Line.GetNormalisedVector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSlidePositionOffBlock
bool GetSlidePositionOffBlock(Point2 LastPosition, Point2 newPosition, Point2 tileCentre, int tileSize, float radius, ref Point2 slidePosition)
{
bool basicMethod = true;
if (basicMethod)
{
OgreMaths.Point[] positions = new OgreMaths.Point[4];
Box l_tile = new Box(new OgreMaths.Point(tileCentre), tileSize + radius * 2);
l_tile.GetLine((int)Box.Corner.TOP_LEFT);
positions[0] = new OgreMaths.Point(newPosition);
positions[0].x = Math.Min(newPosition.X, l_tile.corners[(int)Box.Corner.TOP_LEFT].x);
positions[1] = new OgreMaths.Point(newPosition);
positions[1].y = Math.Min(newPosition.Y, l_tile.corners[(int)Box.Corner.TOP_LEFT].y);
positions[2] = new OgreMaths.Point(newPosition);
positions[2].x = Math.Max(newPosition.X, l_tile.corners[(int)Box.Corner.BOTTOM_RIGHT].x);
positions[3] = new OgreMaths.Point(newPosition);
positions[3].y = Math.Max(newPosition.Y, l_tile.corners[(int)Box.Corner.BOTTOM_RIGHT].y);
int shortestLengthIndex = 0;
float shortestLength = OgreMaths.Point.DistanceSquared(new OgreMaths.Point(newPosition), positions[0]);
for (int i = 0; i < 4; i++)
{
float length = OgreMaths.Point.DistanceSquared(new OgreMaths.Point(newPosition), positions[i]);
if (length < shortestLength)
{
shortestLength = length;
shortestLengthIndex = i;
}
}
slidePosition = new Point2(positions[shortestLengthIndex]);
return true;
}
else
{
Box l_tile = new Box(new OgreMaths.Point(tileCentre), tileSize);
Line l_vectorIn =
new Line(new OgreMaths.Point(LastPosition),
new OgreMaths.Point(newPosition.X, newPosition.Y));
OgreMaths.Point l_vectorNormalised = l_vectorIn.GetNormalisedVector();
l_vectorIn.b += l_vectorNormalised.Mult(radius);
Line lineChosen = new Line();
OgreMaths.Point intersect = new OgreMaths.Point();
OgreMaths.Point reflectionPoint = new OgreMaths.Point();
bool intersectionHappened = Box.CalcReflectVectorWithBox(new OgreMaths.Point(tileCentre), tileSize,
l_vectorIn,
ref reflectionPoint, ref intersect);
if (intersectionHappened)
{
OgreMaths.Point reflectVec = reflectionPoint - intersect;
reflectVec.Normalise();
slidePosition = new Point2(intersect + reflectVec.Mult(radius + 4.5f));
}
/*
if (intersectionHappened)
{
OgreMaths.Point vecDir = l_vectorIn.GetVector();
OgreMaths.Point newDirection = lineChosen.GetVector();
float temp = newDirection.x;
newDirection.x = newDirection.y;
newDirection.y = newDirection.x;
newDirection.x = Math.Abs(newDirection.x) * vecDir.x / -Math.Abs(vecDir.x);
newDirection.y = Math.Abs(newDirection.y) * vecDir.y / -Math.Abs(vecDir.y);
OgreMaths.Point directionApplied = intersect + newDirection;
slidePosition = new Point2(intersect);//directionApplied);
slidePosition = new Point2(directionApplied);
}
*/
return intersectionHappened;
}
}