Beispiel #1
0
        internal void ShowVector3(String name, Vector3 location, Vector3 vector, Color color)
        {
            Vector3 v1 = location;
            Vector3 v2 = location + vector;
            // Difference vector
            Vector3 diff     = v1 - v2;
            float   distance = Vector3.Distance(v1, v2);

            if (distance == 0)
            {
                return;
            }
            diff *= 1 / distance;
            // Craft a vector that is normal to diff
            Vector3 normal1 = Vector3.Cross(diff, new Vector3(diff.Y, diff.X, diff.Z));

            if (normal1 == Vector3.Zero)
            {
                normal1 = Vector3.Cross(diff, diff + Vector3.UnitY);
            }
            // Craft a vector that is normal to both diff and normal1
            Vector3 normal2 = Vector3.Cross(diff, normal1);

            normal1 *= distance * 0.02f;
            normal2 *= distance * 0.02f;
            diff    *= distance * 0.04f;
            lines.ShowLine(name + "1", v1, v2, color);
            lines.ShowLine(name + "2", v2 + normal1 + diff, v2, color);
            lines.ShowLine(name + "3", v2 - normal1 + diff, v2, color);
            lines.ShowLine(name + "4", v2 + normal2 + diff, v2, color);
            lines.ShowLine(name + "5", v2 - normal2 + diff, v2, color);
        }
Beispiel #2
0
        internal void ShowSphere(String name, Vector3 center, float radius, Color color)
        {
            for (int j = 0; j < Sides; j++)
            {
                float   angle = j / (float)Sides * MathHelper.TwoPi;
                Vector3 x     = new Vector3((float)Math.Cos(angle), 0, (float)Math.Sin(angle)) * radius;
                Vector3 y     = Vector3.UnitY * radius;

                // Draw the vertical circles.
                for (int i = 0; i < CircleSteps; i++)
                {
                    float angle1 = i / (float)CircleSteps * MathHelper.TwoPi;
                    float angle2 = (i + 1) / (float)CircleSteps * MathHelper.TwoPi;
                    float sin1   = (float)Math.Sin(angle1);
                    float cos1   = (float)Math.Cos(angle1);
                    float sin2   = (float)Math.Sin(angle2);
                    float cos2   = (float)Math.Cos(angle2);
                    lines.ShowLine(name + "x" + j + i.ToString(), center + y * sin1 + x * cos1, center + y * sin2 + x * cos2, color);
                }
            }

            Vector3 x2 = Vector3.UnitX * radius;
            Vector3 z2 = Vector3.UnitZ * radius;

            // Draw the equator.
            for (int i = 0; i < CircleSteps; i++)
            {
                float sin1 = (float)Math.Sin(i / (float)CircleSteps * MathHelper.TwoPi);
                float cos1 = (float)Math.Cos(i / (float)CircleSteps * MathHelper.TwoPi);
                float sin2 = (float)Math.Sin((i + 1) / (float)CircleSteps * MathHelper.TwoPi);
                float cos2 = (float)Math.Cos((i + 1) / (float)CircleSteps * MathHelper.TwoPi);
                lines.ShowLine(name + "y" + i, center + x2 * sin1 + z2 * cos1, center + x2 * sin2 + z2 * cos2, color);
            }
        }
Beispiel #3
0
        internal void ShowSphere(String name, Vector3 center, float radius, Color color)
        {
            for (var j = 0; j < Sides; j++)
            {
                var angle = j / (float)Sides * MathHelper.TwoPi;
                var x     = new Vector3((float)Math.Cos(angle), 0, (float)Math.Sin(angle)) * radius;
                var y     = Vector3.UnitY * radius;

                // Draw the vertical circles.
                for (var i = 0; i < CircleSteps; i++)
                {
                    _lines.ShowLine(name + "x" + j + i, center + y * SinCircleSteps[i] + x * CosCircleSteps[i], center + y * SinCircleSteps[i + 1] + x * CosCircleSteps[i + 1], color);
                }
            }

            var x2 = Vector3.UnitX * radius;
            var z2 = Vector3.UnitZ * radius;

            // Draw the equator.
            for (var i = 0; i < CircleSteps; i++)
            {
                var sin1 = (float)Math.Sin(i / (float)CircleSteps * MathHelper.TwoPi);
                var cos1 = (float)Math.Cos(i / (float)CircleSteps * MathHelper.TwoPi);
                var sin2 = (float)Math.Sin((i + 1) / (float)CircleSteps * MathHelper.TwoPi);
                var cos2 = (float)Math.Cos((i + 1) / (float)CircleSteps * MathHelper.TwoPi);
                _lines.ShowLine(name + "y" + i, center + x2 * sin1 + z2 * cos1, center + x2 * sin2 + z2 * cos2, color);
            }
        }
Beispiel #4
0
        internal void ShowVector2(String name, Vector2 location, Vector2 vector, Color color)
        {
            var v1 = location;
            var v2 = location + vector;
            // Difference vector
            var diff     = v1 - v2;
            var distance = Vector2.Distance(location, v2);

            if (distance == 0)
            {
                return;
            }
            diff *= 1 / distance;
            // Craft a vector that is normal to diff
            var normal1 = new Vector2(diff.Y, -diff.X);

            // TODO: Move this value to a config
            normal1 *= 8;
            diff    *= 8;
            _lines.ShowLine(name + "1", v1, v2, color);
            _lines.ShowLine(name + "2", v2 + normal1 + diff, v2, color);
            _lines.ShowLine(name + "3", v2 - normal1 + diff, v2, color);
        }
Beispiel #5
0
 internal void ShowBox(String name, Vector3 min, Vector3 max, Color color)
 {
     lines.ShowLine(name + "a1", new Vector3(min.X, min.Y, min.Z), new Vector3(max.X, min.Y, min.Z), color);
     lines.ShowLine(name + "a2", new Vector3(min.X, max.Y, min.Z), new Vector3(max.X, max.Y, min.Z), color);
     lines.ShowLine(name + "a3", new Vector3(min.X, min.Y, min.Z), new Vector3(min.X, max.Y, min.Z), color);
     lines.ShowLine(name + "a4", new Vector3(max.X, min.Y, min.Z), new Vector3(max.X, max.Y, min.Z), color);
     lines.ShowLine(name + "a5", new Vector3(min.X, min.Y, max.Z), new Vector3(max.X, min.Y, max.Z), color);
     lines.ShowLine(name + "a6", new Vector3(min.X, max.Y, max.Z), new Vector3(max.X, max.Y, max.Z), color);
     lines.ShowLine(name + "a7", new Vector3(min.X, min.Y, max.Z), new Vector3(min.X, max.Y, max.Z), color);
     lines.ShowLine(name + "a8", new Vector3(max.X, min.Y, max.Z), new Vector3(max.X, max.Y, max.Z), color);
     lines.ShowLine(name + "a9", new Vector3(min.X, min.Y, min.Z), new Vector3(min.X, min.Y, max.Z), color);
     lines.ShowLine(name + "aa", new Vector3(min.X, max.Y, min.Z), new Vector3(min.X, max.Y, max.Z), color);
     lines.ShowLine(name + "ab", new Vector3(max.X, max.Y, min.Z), new Vector3(max.X, max.Y, max.Z), color);
     lines.ShowLine(name + "ac", new Vector3(max.X, min.Y, min.Z), new Vector3(max.X, min.Y, max.Z), color);
 }