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); }
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); } }
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); } }
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); }
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); }