コード例 #1
0
ファイル: Program.cs プロジェクト: xmzhan/LitMath
        static void Main(string[] args)
        {
            //LitMath.Vector2 v = new LitMath.Vector2(0.7, 0.7);
            //v = LitMath.Vector2.RotateInRadian(v, LitMath.Utils.PI / 2);
            //Console.WriteLine(v.ToString());
            //Console.WriteLine(Math.Asin(0.5).ToString());

            {
                LitMath.Vector3 va    = new LitMath.Vector3(0, 0, 1);
                LitMath.Vector3 vb    = new LitMath.Vector3(0, 1, 0);
                LitMath.Vector3 axis  = new LitMath.Vector3(1, 1, 0);
                double          angle = LitMath.Vector3.SignedAngle(va, vb, axis);
                Console.WriteLine(angle);
            }
            {
                LitMath.Vector3 va    = new LitMath.Vector3(0, 0, 1);
                LitMath.Vector3 vb    = new LitMath.Vector3(0, 0, 1);
                LitMath.Vector3 axis  = new LitMath.Vector3(1, 1, 0);
                double          angle = LitMath.Vector3.SignedAngle(va, vb, axis);
                Console.WriteLine(angle);
            }
            {
                LitMath.Vector3 va    = new LitMath.Vector3(0, 0, 1);
                LitMath.Vector3 vb    = new LitMath.Vector3(0, 1, 0);
                LitMath.Vector3 axis  = new LitMath.Vector3(0, 1, 1);
                double          angle = LitMath.Vector3.SignedAngle(va, vb, axis);
                Console.WriteLine(angle);
            }


            return;

            //LitMath.Vector2 v1 = new LitMath.Vector2(1, 3);
            //Console.WriteLine(v1.ToString());

            LitMath.Line2 line1 = new LitMath.Line2(
                new LitMath.Vector2(0, 0),
                new LitMath.Vector2(10, 0));
            line1.startPoint.x = 10;
            LitMath.Line2 line2 = new LitMath.Line2(
                new LitMath.Vector2(5, 0),
                new LitMath.Vector2(5, 10));

            LitMath.Vector2 intersection = new LitMath.Vector2();
            if (LitMath.Line2.Intersect(line1, line2, ref intersection))
            {
                Console.WriteLine("相交: " + intersection.ToString());
            }

            LitMath.Rectangle2 rect = new LitMath.Rectangle2(new LitMath.Vector2(10, 10), 10, 20);
            Console.WriteLine(rect.ToString());
            Console.WriteLine(rect.leftBottom.ToString());
            Console.WriteLine(rect.leftTop.ToString());
            Console.WriteLine(rect.rightTop.ToString());
            Console.WriteLine(rect.rightBottom.ToString());

            LitMath.Circle2 circle = new LitMath.Circle2(new LitMath.Vector2(25, 25), 10);
            Console.WriteLine(circle.ToString());
            Console.WriteLine(circle.diameter.ToString());
        }
コード例 #2
0
        /// <summary>
        /// 设置夹点
        /// </summary>
        public override void SetGripPointAt(int index, GripPoint gripPoint, LitMath.Vector2 newPosition)
        {
            if (index == 0)
            {
                _center = newPosition;
            }
            else if (index >= 1 && index <= 3)
            {
                LitMath.Vector2 startPoint  = this.startPoint;
                LitMath.Vector2 endPoint    = this.endPoint;
                LitMath.Vector2 middlePoint = this.middlePoint;

                if (index == 1)
                {
                    startPoint  = newPosition;
                    middlePoint = (LitMath.Vector2)gripPoint.xData1;
                }
                else if (index == 2)
                {
                    endPoint    = newPosition;
                    middlePoint = (LitMath.Vector2)gripPoint.xData1;
                }
                else if (index == 3)
                {
                    middlePoint = newPosition;
                }

                LitMath.Circle2 newCircle = LitMath.Circle2.From3Points(
                    startPoint, middlePoint, endPoint);
                if (newCircle.radius > 0)
                {
                    LitMath.Vector2 xPositive  = new LitMath.Vector2(1, 0);
                    double          startAngle = LitMath.Vector2.SignedAngleInRadian(xPositive,
                                                                                     startPoint - newCircle.center);
                    double endAngle = LitMath.Vector2.SignedAngleInRadian(xPositive,
                                                                          endPoint - newCircle.center);
                    double middleAngle = LitMath.Vector2.SignedAngleInRadian(xPositive,
                                                                             middlePoint - newCircle.center);
                    startAngle  = MathUtils.NormalizeRadianAngle(startAngle);
                    endAngle    = MathUtils.NormalizeRadianAngle(endAngle);
                    middleAngle = MathUtils.NormalizeRadianAngle(middleAngle);

                    _center = newCircle.center;
                    _radius = newCircle.radius;
                    if (AngleInArcRange(middleAngle, startAngle, endAngle))
                    {
                        this.startAngle = startAngle;
                        this.endAngle   = endAngle;
                    }
                    else
                    {
                        this.startAngle = endAngle;
                        this.endAngle   = startAngle;
                    }
                }
            }
        }