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


C# Line.GetNormalisedVector方法代码示例

本文整理汇总了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;
            }
        }
开发者ID:RandomTiger,项目名称:OgresLairVR,代码行数:84,代码来源:Character.cs


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