Esempio n. 1
0
    void FixedUpdate()
    {
        if (evaluation.IsComplete)
        {
            return;
        }

        if (Network != null)
        {
            var upperTheta = AngleHelper.GetAngle(upper.rotation);
            var lowerTheta = AngleHelper.GetAngle(lower.rotation);
            var position   = wheel.transform.localPosition.x;

            Network.Clear();

            Network.UpperTheta.Set(upperTheta);
            Network.LowerTheta.Set(lowerTheta);
            Network.Position.Set(position);

            Network.Tick();

            this.speed = (float)Network.Speed.Get();

            // Update motor speed
            SetMotorSpeed(this.speed);
        }
    }
        public void CalcularAngulosFinales()
        {
            angulos = AngleHelper.SetValorAngulos(HombroDerecho,
                                                  ManoDerecha, CodoDerecho, skelObjeto);
            if (angulos[0] == -1 || angulos[1] == -1 || angulos[2] == -1 || angulos[3] == -1)
            {
                //Console.WriteLine("no se puede alcanzar el objeto");

                /*dc.DrawText(
                 * new FormattedText("No se puede alcanzar el objeto",
                 *          CultureInfo.GetCultureInfo("en-us"),
                 *          FlowDirection.LeftToRight,
                 *          new Typeface("Verdana"),
                 *          25, System.Windows.Media.Brushes.Red),
                 *          new Point(0,0));*/
                flagSkeleton = false;
            }
            else
            {
                flagSkeleton = true;
                //si se puede alcanzar el objeto,
                try
                {
                    this.ConfirmacionButton.IsEnabled = true;
                    this.MensajesLabel.Content        = "Angulos calculados";
                }
                catch (Exception)
                {
                    Console.WriteLine("Excepcion en escribir el angulo en arduino");
                }
            }
        }
Esempio n. 3
0
    public static RESULT Rotate(float currentAngleY, float targetAngleY, float speed, float arriveThreshold)
    {
        float dAngle = targetAngleY - currentAngleY;

        dAngle = AngleHelper.LimitAngleInNPI_PI(dAngle);

        float turnLimitAngle = speed * TimeHelper.deltaTime;
        float cAngle         = 0;

        if (dAngle > 0)
        {
            cAngle = Mathf.Min(turnLimitAngle, dAngle);
        }
        else if (dAngle < 0)
        {
            cAngle = Mathf.Max(-turnLimitAngle, dAngle);
        }

        float leftDegree = AngleHelper.LimitAngleInNPI_PI(dAngle - cAngle);

        RESULT r = new RESULT();

        r.arrived           = Mathf.Abs(leftDegree) <= arriveThreshold;
        r.turnDegree        = cAngle;
        r.leftDegree        = leftDegree;
        r.destinationAngleY = currentAngleY + cAngle;
        return(r);
    }
Esempio n. 4
0
        public static void UpdateVision(Bot bot, IEnumerable <Bot> allBots)
        {
            foreach (var e in bot.Eyes)
            {
                e.Clear();
            }

            foreach (var otherBot in allBots.Where(b => b != bot))
            {
                var distanceVector  = otherBot.Position - bot.Position;
                var distanceSquared = distanceVector.LengthSquared();
                if (distanceSquared < VisionLimitSquared)
                {
                    // Take the bearing to the centre of the other bot
                    var angleToOtherBot = (float)Math.Atan2(distanceVector.Y, distanceVector.X);
                    var relativeAngle   = AngleHelper.NormaliseAngle(angleToOtherBot - bot.Orientation);
                    // Translate to within -pi to +pi (move the discontinuity to outside the edges of vision)
                    if (relativeAngle > Math.PI)
                    {
                        relativeAngle -= 2 * (float)Math.PI;
                    }

                    // Calculate what arc the other bot should fill
                    var distance          = Math.Sqrt(distanceSquared);
                    var radiusAngle       = Math.Atan2(otherBot.Radius, distance);
                    var visibleAngleStart = relativeAngle - radiusAngle;
                    var visibleAngleStop  = relativeAngle + radiusAngle;

                    for (var i = 0; i < Bot.EyeCount; i++)
                    {
                        var eyePosition = i - Bot.EyeCount / 2;
                        var eyeStart    = (eyePosition * Bot.EyeAngle * 2) - Bot.EyeAngle;
                        var eyeStop     = (eyePosition * Bot.EyeAngle * 2) + Bot.EyeAngle;

                        if (
                            visibleAngleStart > eyeStart && visibleAngleStart < eyeStop || // Other bot start edge is in the eye
                            visibleAngleStop > eyeStart && visibleAngleStop < eyeStop || // Other bot stop edge is in the eye
                            visibleAngleStart < eyeStart && visibleAngleStop > eyeStop    // Other bot completely covers the eye
                            )
                        {
                            bot.Eyes[i].Add(new EyeEntry(otherBot, (float)distance));
                        }
                    }
                }
            }

            bot.EyeDistances = bot.Eyes.Select(e => e.Any() ? Bot.VisionLimit - e.Min(n => n.Distance) : 0).ToArray();

            var middleEye = bot.Eyes[bot.FocusEye];

            if (middleEye.Any())
            {
                bot.FocussedBot = middleEye.OrderBy(e => e.Distance).First().OtherBot;
            }
            else
            {
                bot.FocussedBot = null;
            }
        }
Esempio n. 5
0
        public void NormaliseAngleReducesVeryPositiveAngle()
        {
            const float TestAngle = 2.0f;

            var result = AngleHelper.NormaliseAngle(TestAngle + (float)Math.PI * 6);

            result.Should().BeApproximately(TestAngle, AngleTolerance);
        }
Esempio n. 6
0
        public void NormaliseAngleLeavesSmallAngle()
        {
            const float TestAngle = 2.0f;

            var result = AngleHelper.NormaliseAngle(TestAngle);

            result.Should().BeApproximately(TestAngle, AngleTolerance);
        }
Esempio n. 7
0
        public void NormaliseAngleIncreasesVeryNegativeAngle()
        {
            const float TestAngle = 2.0f;

            var result = AngleHelper.NormaliseAngle(TestAngle - (float)Math.PI * 6);

            result.Should().BeApproximately(TestAngle, AngleTolerance);
        }
        private double CalcInterceptAngle(Orbit targetOrbit, Orbit originOrbit)
        {
            double originRadius = (originOrbit.semiMinorAxis + originOrbit.semiMajorAxis) * 0.5;
            double targetRadius = (targetOrbit.semiMinorAxis + targetOrbit.semiMajorAxis) * 0.5;
            double angle        = 180.0 * (1.0 - Math.Pow((originRadius + targetRadius) / (2.0 * targetRadius), 1.5));

            angle = PhaseAngle - angle;
            return(RelativeInclination < 90.0 ? AngleHelper.Clamp360(angle) : AngleHelper.Clamp360(360.0 - (180.0 - angle)));
        }
Esempio n. 9
0
        private void CursorHandle()
        {
            var position = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1);

            position = Camera.main.ScreenToWorldPoint(position);
            var projectileVector = new Vector2(position.x - transform.position.x, position.y - transform.position.y);

            gameObject.GetComponent <Transform>().rotation = Quaternion.Euler(0, 0, AngleHelper.GetAngleForParticles(projectileVector) - arc / 2);
        }
Esempio n. 10
0
 // Token: 0x06000A47 RID: 2631 RVA: 0x0002C8EA File Offset: 0x0002ACEA
 public static float LimitAngleInNPI_PI(float angle)
 {
     angle = AngleHelper.LimitAngleIn0_360(angle);
     if (angle > 180f)
     {
         angle -= 360f;
     }
     return(angle);
 }
Esempio n. 11
0
        private void LookingAngle()
        {
            Vector3 pz               = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 mouse            = new Vector2(pz.x, pz.y);
            Vector2 vectorFromCenter = new Vector2(mouse.x - rb.position.x, mouse.y - rb.position.y);
            double  angle            = AngleHelper.GetAngleForTurningAround(vectorFromCenter);

            AnalyzeAngle(angle);
        }
Esempio n. 12
0
    public static float CalcRotationTo(Vector3 a, Vector3 b, float currentAngleY)
    {
        float targetAngle = CalcRotationAngleY(a, b);

        float dAngle = (targetAngle - currentAngleY);

        dAngle = AngleHelper.LimitAngleInNPI_PI(dAngle);
        return(dAngle);
    }
Esempio n. 13
0
        public override void Draw(SectionModule section)
        {
            var target = FlightGlobals.fetch.VesselTarget?.GetVessel();

            if (target != null)
            {
                double latitude = AngleHelper.Clamp360(target.latitude);
                DrawLine(Units.ToAngleDMS(latitude) + (latitude < 0 ? " S" : " N"), section.IsHud);
            }
        }
Esempio n. 14
0
        public override void Draw(SectionModule section)
        {
            var target = FlightGlobals.fetch.VesselTarget;

            if (target != null)
            {
                var    vessel    = target.GetVessel();
                double longitude = AngleHelper.Clamp180(vessel.longitude);
                DrawLine(Units.ToAngleDMS(longitude) + (longitude < 0.0 ? " W" : " E"), section.IsHud);
            }
        }
Esempio n. 15
0
 public ParticleGenerator(Vector2 position, Dictionary <string, int> spritePercentage, Direction direction, Angle sprayAngle, float duration, float frequency, float particlesPerGeneration)
 {
     _x = position.X;
     _y = position.Y;
     _spritePercentage      = spritePercentage;
     Rotation               = AngleHelper.DirectionToFloat(direction);
     SprayAngle             = sprayAngle;
     Duration               = duration;
     Frequency              = frequency;
     ParticlesPerGeneration = particlesPerGeneration;
 }
Esempio n. 16
0
        public static void UpdateBot(Bot bot)
        {
            bot.Orientation = AngleHelper.NormaliseAngle(bot.Orientation + AngleHelper.IntToAngle(bot.Memory[(int)MemoryAddresses.TurnRight] - bot.Memory[(int)MemoryAddresses.TurnLeft]));

            // Right and down are positive x and y respectively
            var netForce = new Vector2(
                bot.GetFromMemory(MemoryAddresses.MoveUp) - bot.GetFromMemory(MemoryAddresses.MoveDown),
                bot.GetFromMemory(MemoryAddresses.MoveRight) - bot.GetFromMemory(MemoryAddresses.MoveLeft));

            var rotation = Matrix3x2.CreateRotation(bot.Orientation);

            bot.Force += Vector2.Transform(netForce, rotation);
        }
Esempio n. 17
0
        public void DrawSegment(SpriteBatch spriteBatch, ISegment segment)
        {
            Texture2D segmentTexture2D;

            _textures.TryGetValue("SegmentTexture", out segmentTexture2D);
            if (segmentTexture2D == null)
            {
                throw new Exception("ERROR : Texture not found in the dictionary");
            }
            float radianAngle = AngleHelper.SlopeToRadian((float)segment.Slope);

            spriteBatch.Draw(segmentTexture2D, new Rectangle((int)segment.Point1.X, (int)segment.Point1.Y, (int)segment.Lenght + 1, 1), null, Color.Black, radianAngle, new Vector2(0, 0), SpriteEffects.None, 1f);
        }
Esempio n. 18
0
        public void AngleToIntScalesCorrectly()
        {
            const float FullAngle    = 2 * (float)Math.PI;
            const int   FullAngleInt = 1000;

            var testAngle1 = AngleHelper.AngleToInt(FullAngle);
            var testAngle2 = AngleHelper.AngleToInt(FullAngle / 2);
            var testAngle3 = AngleHelper.AngleToInt(FullAngle / 3);

            testAngle1.Should().Be(FullAngleInt);
            testAngle2.Should().Be(FullAngleInt / 2);
            testAngle3.Should().Be(FullAngleInt / 3);
        }
Esempio n. 19
0
        public void IntToAngleScalesCorrectly()
        {
            const float FullAngle    = 2 * (float)Math.PI;
            const int   FullAngleInt = 1000;

            var testAngle1 = AngleHelper.IntToAngle(FullAngleInt);
            var testAngle2 = AngleHelper.IntToAngle(FullAngleInt / 2);
            var testAngle3 = AngleHelper.IntToAngle(FullAngleInt / 3);

            testAngle1.Should().BeApproximately(FullAngle, AngleTolerance);
            testAngle2.Should().BeApproximately(FullAngle / 2, AngleTolerance);
            testAngle3.Should().BeApproximately(FullAngle / 3, AngleTolerance);
        }
Esempio n. 20
0
        private void Movement()
        {
            var    position                 = Character.transform.position;
            var    vectorFromCenter         = new Vector2(position.x - transform.position.x, position.y - transform.position.y);
            double angle                    = AngleHelper.GetAngleForTurningAround(vectorFromCenter);
            var    angleFromSectorBeginning = angle + (Constants.Round / NumOfSpriteTurns) / 2;

            int spriteNr = (int)(angleFromSectorBeginning / (Constants.Round / NumOfSpriteTurns));

            if (spriteNr < 0 || spriteNr == NumOfSpriteTurns)
            {
                spriteNr = 0;
            }
        }
Esempio n. 21
0
    void FixedUpdate()
    {
        if (isComplete)
        {
            return;
        }

        // Consider 30 seconds to be solved
        var duration = Time.time - startTime;

        if (duration > 30.0f)
        {
            EndTrial();
        }

        // End if it fell off the edge
        if (wheel.transform.position.y - startPosition.y < -2.0f)
        {
            EndTrial();
            return;
        }

        var thetaLower    = AngleHelper.GetAngle(lower.rotation);
        var thetaDotLower = AngleHelper.GetAngle(lower.angularVelocity);
        var thetaUpper    = AngleHelper.GetAngle(upper.rotation);
        var thetaDotUpper = AngleHelper.GetAngle(upper.angularVelocity);
        var x             = wheel.transform.localPosition.x;
        var xDot          = wheel.velocity.magnitude; // speed?

        // End if it went out of bounds
        if (Mathf.Abs(x) > 14.0f)
        {
            EndTrial();
            return;
        }

        var upperFell = NumberHelper.Between(Mathf.Abs(thetaUpper), 110.0f, 250.0f);
        var lowerFell = NumberHelper.Between(Mathf.Abs(thetaLower), 110.0f, 250.0f);

        if (upperFell || lowerFell)
        {
            EndTrial();
            return;
        }

        currentTrial.Update(thetaLower, thetaDotLower,
                            thetaUpper, thetaDotUpper,
                            x, xDot);
    }
Esempio n. 22
0
        public void TestGetAngle()
        {
            Assert.AreEqual(0.0f, AngleHelper.GetAngle(-360.0f));
            Assert.AreEqual(0.0f, AngleHelper.GetAngle(0.0f));
            Assert.AreEqual(0.0f, AngleHelper.GetAngle(360.0f));

            Assert.AreEqual(90.0f, AngleHelper.GetAngle(-270.0f));
            Assert.AreEqual(90.0f, AngleHelper.GetAngle(90.0f));

            Assert.AreEqual(-90.0f, AngleHelper.GetAngle(-90.0f));
            Assert.AreEqual(-90.0f, AngleHelper.GetAngle(270.0f));

            Assert.AreEqual(180.0f, AngleHelper.GetAngle(180.0f));
            Assert.AreEqual(-180.0f, AngleHelper.GetAngle(-180.0f));
        }
Esempio n. 23
0
    public static Vector3 CalcTileArrowOffset(Spine.Slot boundingSlot, Transform transform, float rotation,
                                              float innerRate = 0.7f)
    {
        float   radius = AngleHelper.AngleToRadius(rotation - 90);
        Vector3 v      = new Vector3(Mathf.Cos(radius), Mathf.Sin(radius)) * 10000;

        Spine.BoundingBoxAttachment bounding = boundingSlot.Attachment as Spine.BoundingBoxAttachment;
        float[] vertices = (float[])bounding.Vertices.Clone();

        Vector2 p1 = new Vector2();
        Vector2 p2 = new Vector2();

        int n = vertices.Length / 2;

        for (int i = 0; i <= n; ++i)
        {
            int   m      = i % n;
            float localX = vertices[m * 2 + 0];
            float localY = vertices[m * 2 + 1];
            p2.Set(localX, localY);

            if (i >= 1)
            {
                float   intersectDist;
                Vector2 intersectPoint;
                if (GeometryHelper.CalcIntersectPoint(Vector2.zero, v, p1, p2, out intersectPoint, out intersectDist))
                {
                    intersectPoint *= innerRate;

                    float worldX;
                    float worldY;
                    boundingSlot.Bone.localToWorld(intersectPoint.x, intersectPoint.y, out worldX, out worldY);

                    Vector3 offset = new Vector3(worldX, worldY, 0);
                    offset = transform.TransformPoint(offset);
                    return(offset);
                }
            }

            p1 = p2;
        }

        Vector3 boneCenter = new Vector3(boundingSlot.Bone.WorldX, boundingSlot.Bone.WorldY, 0);

        boneCenter = transform.TransformPoint(boneCenter);
        return(boneCenter);
    }
        public PruebaAngulos()
        {
            mano          = new Joint();
            mano.Position = SetPosition(-0.87, 4.29, 1.89);

            codo          = new Joint();
            codo.Position = SetPosition(-0.87, 2.31, 1.8);

            hombro          = new Joint();
            hombro.Position = SetPosition(-0.87, 0.52, 3.8);

            objeto = new SkeletonPoint();

            objeto = SetPosition(-0.87, 4.74, 4.1);

            AngleHelper.SetValorAngulos(hombro, mano, codo, objeto);
        }
Esempio n. 25
0
        public void UpdateBotSetsRotation()
        {
            const int turnLeft  = 100;
            const int turnRight = 350;

            var bot = new Bot
            {
                Orientation = 0
            };

            bot.SetMemory(MemoryAddresses.TurnLeft, turnLeft);
            bot.SetMemory(MemoryAddresses.TurnRight, turnRight);

            RuntimeEngine.UpdateBot(bot);

            bot.Orientation.Should().BeApproximately(AngleHelper.IntToAngle(turnRight - turnLeft), 3);
        }
Esempio n. 26
0
        protected void ChangeAnimation(Vector2 vectorFromCenter)
        {
            double angle = AngleHelper.GetAngleForTurningAround(vectorFromCenter);
            var    angleFromSectorBeginning = angle + (Constants.Round / NumOfSpriteTurns) / 2;

            int spriteNr = (int)(angleFromSectorBeginning / (Constants.Round / NumOfSpriteTurns));

            if (spriteNr < 0 || spriteNr == NumOfSpriteTurns)
            {
                spriteNr = 0;
            }
            if (PrevBehaviour == spriteNr)
            {
                return;
            }
            Animator.SetInteger("angle", spriteNr); //throwing warning - need to expect this
            PrevBehaviour = spriteNr;
        }
Esempio n. 27
0
        public PruebaAngulos()
        {
            hombro          = new Joint();
            hombro.Position = SetPosition(2.3, 1.21, -1.67);

            codo          = new Joint();
            codo.Position = SetPosition(2.3, 0.98, -0.78);

            mano          = new Joint();
            mano.Position = SetPosition(2.3, 1.42, 0.3);

            objeto = new SkeletonPoint();

            objeto = SetPosition(2.3, 0.25, -0.17);
            AngleHelper a = new AngleHelper();

            a.SetValorAngulos(new Puntos(hombro, codo, mano, objeto));
        }
Esempio n. 28
0
        public ProjectedPoint FindMarkRoundPoint(Mark previousMark, Mark nextMark)
        {
            ProjectedPoint myA = AveragedLocation.Project();

            float previousAngle = (float)AngleHelper.FindAngleWTF(previousMark.AveragedLocation.Project(), myA);

            previousAngle = AngleHelper.NormalizeAngle(-previousAngle);

            float nextAngle = (float)AngleHelper.FindAngleWTF(nextMark.AveragedLocation.Project(), myA);

            nextAngle = AngleHelper.NormalizeAngle(-nextAngle);

            float roundingAngle = AngleHelper.FindHalfwayCounterClockwiseAngle(previousAngle, nextAngle);

            ProjectedPoint pp = AngleHelper.PolarToRectangular(myA, (double)roundingAngle, 1000.0);

            return(pp);
        }
Esempio n. 29
0
        public override void Draw(SectionModule section)
        {
            var target = FlightGlobals.fetch.VesselTarget;

            if (target != null)
            {
                var vessel = target.GetVessel();
                if (vessel == null)
                {
                    DrawLine("N/A", section.IsHud);
                }
                else
                {
                    double latitude = AngleHelper.Clamp180(vessel.latitude);
                    DrawLine(Units.ToAngleDMS(latitude) + (latitude < 0 ? " S" : " N"), section.IsHud);
                }
            }
        }
Esempio n. 30
0
        public override void Draw(Unity.Flight.ISectionModule section)
        {
            var target = Rendezvous.RendezvousProcessor.targetVessel;

            if (target != null)
            {
                var vessel = target.GetVessel();
                if (vessel == null)
                {
                    DrawLine("N/A", section.IsHud);
                }
                else
                {
                    double latitude = AngleHelper.Clamp180(vessel.latitude);
                    DrawLine(Units.ToAngleDMS(latitude) + (latitude < 0 ? " S" : " N"), section.IsHud);
                }
            }
        }