在一个界面A上画一个矩形a,A的ClientRectangle为(0,0,1000,1000),a在A上的坐标为(100,100,200,200);如何做矩形a的投影图到另一个界面B上,B的ClientRectangle为(0,0,500,500)如何做坐标变换? 变换矩阵是怎么样的?

解决方案 »

  1.   

    如果用C#写的话,可以引用画图的命名空间
    using System.Drawing.Imaging;
    using System.Drawing;
    自己写算法来实现你想要写的任何图.
      

  2.   

    哦 只是平面的.....我还以为是投影图呢...你绘制的图形..直接去绘制B就可以了...你变换坐标做什么呢?Graphics.TranslateClip(); 是改变坐标的.
      

  3.   

    呵呵,看来是lz怕麻烦那,那给你个简单的办法,A截张图,往B上一贴,自动拉伸一下就成了。如果只需要影子,那边换一下色彩就成了。
      

  4.   

    没看懂,坐标转换用过,
    e.Graphics.Transform = new Matrix(1, 2, 3, 4, 5, 6);123456是六个参数
    可实现 位置,角度,缩放.
      

  5.   

    用DirectX 
     public static void invertedImage(Panel panel, string str)
            {
                //投影文字
                Graphics g = panel.CreateGraphics();
                //设置文本输出质量
                g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                g.SmoothingMode = SmoothingMode.AntiAlias;
                Font newFont = new Font("Times New Roman", 48, FontStyle.Bold);
                Matrix matrix = new Matrix();
                //投射
                matrix.Shear(-1.5f, 0.0f);
                //缩放
                matrix.Scale(1, 0.5f);
                //平移
                matrix.Translate(130, 88);
                //对绘图平面实施坐标变换、、
                g.Transform = matrix;
                SolidBrush grayBrush = new SolidBrush(Color.Gray);
                SolidBrush colorBrush = new SolidBrush(Color.White);
                string text = str;
                //绘制阴影
                g.DrawString(text, newFont, grayBrush, new PointF(0, 30));
                g.ResetTransform();
                //绘制前景
                g.DrawString(text, newFont, colorBrush, new PointF(0, 30));
            }