我试图使用绘制线方法显示三维轴,我设法围绕其轴旋转一条线,但是我在第二条线旋转时遇到了麻烦从那一行的角度,我想实现基本的旋转方法,但我不知道如何在c#http://en.wikipedia.org/wiki/Rotation_matrix中实现它。我想知道如何将z轴放在xy图表上。记住我想用普通的c#no direct x或其他任何东西来做这件事。
这是我绘制的基本代码
private void Go_Click(object sender, EventArgs e)
{
int radiusx1= Int32.Parse(xbarvalue.Text);
int radiusy1 = Int32.Parse(ybarvalue.Text);
int radiusz1 = Int32.Parse(zbarvalue.Text);
int speedwait = speed.Value;
int position1 =canvas.Width / 2 ;
int position2 = canvas.Height / 2;
for (double i = 0; i <=360; i = i + 0.5)
{
double angle= Math.PI * i / 180.0;
// double angle = i * 0.01745;
float position1x = (float)( position1+Math.Sin(angle)*Theta);
float position1y = (float)( position2+Math.Cos(angle)*Theta2);
float position2x = (float)(position1 + Math.Sin(angle) *radiusy1);
float position2y = (float)(position2 + Math.Cos(angle) * radiusz1);
float position3x = (float)(position1 + Math.Sin(angle) *radiusx1);
float position3y = (float)(position2 + Math.Cos(angle) *radiusz1);
// Graphics g;
// g = canvas.CreateGraphics();
//Pen p;
// Rectangle r;
// p = new Pen(Brushes.Blue);
// r = new Rectangle(position2x,position2y, 1, 1);
// g.DrawRectangle(p, r);
System.Threading.Thread.Sleep(speedwait);
canvas.Refresh();
px.Text = Convert.ToString(position1x);
py.Text = Convert.ToString(position1y);
// pz.Text = Convert.ToString(position1z);
px.Refresh();
py.Refresh();
// pz.Refresh();
System.Drawing.Pen myPen;
System.Drawing.Pen myPen2;
System.Drawing.Pen myPen3;
myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
myPen2 = new System.Drawing.Pen(System.Drawing.Color.Black);
myPen3 = new System.Drawing.Pen(System.Drawing.Color.Blue);
System.Drawing.Graphics formGraphics = canvas.CreateGraphics();
formGraphics.DrawLine(myPen, position1, position2, position1x, position1y);
formGraphics.DrawLine(myPen2, position1, position2,position2x,position2y);
formGraphics.DrawLine(myPen3, position1, position2,position3x, position3y);
};
}
我的第一种方法是在旋转线上使用椭圆来给出深度幻觉
有人可以告诉我如何在c#中编写基本的旋转代码,我的数组有问题。
答案 0 :(得分:1)
如果添加对WindowsBase和PresentationCore的引用,那么有些对象可以帮助您进行3D转换。这些程序集是基本.NET Framework的一部分,不需要像DirectX那样安装任何其他库。例如:
using System.Windows.Media.Media3D;
...
// Define a 90 degree rotation about Y axis
var rotation = new AxisAngleRotation(new Vector(0,1,0), 90);
// Create transformation from our rotation definition
var transform = new RotateTransform3D(rotation);
// Rotate a point using the transformation
var original = new Vector3D(1, 1, 1);
var rotated = transform.Transform(original);
但是,为了在2D表面上绘制3D对象,您必须使用投影矩阵。透视投影使物体看起来更远,而平行投影保持所有距离的尺寸。投影矩阵是将3D矢量转换为可在屏幕上使用的2D矢量的最后一步。