平面c中的3d坐标#

时间:2014-12-30 19:05:31

标签: c# 3d

我试图使用绘制线方法显示三维轴,我设法围绕其轴旋转一条线,但是我在第二条线旋转时遇到了麻烦从那一行的角度,我想实现基本的旋转方法,但我不知道如何在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#中编写基本的旋转代码,我的数组有问题。

1 个答案:

答案 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矢量的最后一步。