開発環境 |
Microsoft Visual C# 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
空のプロジェクト |
プロジェクト名 |
Quaternion |
Program.cs
using System;
using Microsoft.Xna.Framework; // .NET参照
class Program
{
static void Main()
{
Quaternion q1, q2;
float rad = MathHelper.ToRadians(45);
float y = (float)Math.Sin(rad);
float r = (float)Math.Cos(rad);
Console.WriteLine("lat=0 +xから+zへ");
q1 = new Quaternion(1, 0, 0, 0);
q2 = new Quaternion(0, 0, 1, 0);
Slerp(q1, q2);
Console.WriteLine("lat=45 +xから+zへ");
q1 = new Quaternion(r, y, 0, 0);
q2 = new Quaternion(0, y, r, 0);
Slerp(q1, q2);
Console.WriteLine("lat=45 +xから-xへ");
q1 = new Quaternion(r, y, 0, 0);
q2 = new Quaternion(-r, y, 0, 0);
Slerp(q1, q2);
Console.ReadLine();
}
static void Slerp(Quaternion q1, Quaternion q2)
{
for (int n = 0; n <= 4; n++)
{
float t = n / 4.0f;
Quaternion q = Quaternion.Slerp(q1, q2, t);
float lat = MathHelper.ToDegrees((float)Math.Asin(q.Y));
float xz = MathHelper.ToDegrees((float)Math.Atan2(q.Z, q.X));
float xy = MathHelper.ToDegrees((float)Math.Atan2(q.Y, q.X));
Console.WriteLine(String.Format(
"t={0:f2} x={1:f2} y={2:f2} z={3:f2} w={4:f2} lat={5:f2} long={6:f2} xy={7:f2}",
t, q.X, q.Y, q.Z, q.W, lat, xz, xy));
}
}
}
出力
lat=0 +xから+zへ
t=0.00 x=1.00 y=0.00 z=0.00 w=0.00 lat=0.00 long=0.00 xy=0.00
t=0.25 x=0.92 y=0.00 z=0.38 w=0.00 lat=0.00 long=22.50 xy=0.00
t=0.50 x=0.71 y=0.00 z=0.71 w=0.00 lat=0.00 long=45.00 xy=0.00
t=0.75 x=0.38 y=0.00 z=0.92 w=0.00 lat=0.00 long=67.50 xy=0.00
t=1.00 x=0.00 y=0.00 z=1.00 w=0.00 lat=0.00 long=90.00 xy=0.00
lat=45 +xから+zへ
t=0.00 x=0.71 y=0.71 z=0.00 w=0.00 lat=45.00 long=0.00 xy=45.00
t=0.25 x=0.58 y=0.79 z=0.21 w=0.00 lat=52.06 long=20.10 xy=53.79
t=0.50 x=0.41 y=0.82 z=0.41 w=0.00 lat=54.74 long=45.00 xy=63.43
t=0.75 x=0.21 y=0.79 z=0.58 w=0.00 lat=52.06 long=69.90 xy=75.00
t=1.00 x=0.00 y=0.71 z=0.71 w=0.00 lat=45.00 long=90.00 xy=90.00
lat=45 +xから-xへ
t=0.00 x=0.71 y=0.71 z=0.00 w=0.00 lat=45.00 long=0.00 xy=45.00
t=0.25 x=0.38 y=0.92 z=0.00 w=0.00 lat=67.50 long=0.00 xy=67.50
t=0.50 x=0.00 y=1.00 z=0.00 w=0.00 lat=89.98 long=0.00 xy=90.00
t=0.75 x=-0.38 y=0.92 z=0.00 w=0.00 lat=67.50 long=180.00 xy=112.50
t=1.00 x=-0.71 y=0.71 z=0.00 w=0.00 lat=45.00 long=180.00 xy=135.00
最終更新:2012年12月13日 11:55