我现在有画了条有刻度的线条,现在要画成米字图形,我就想让这条刻度线饶某点连续旋转45°

解决方案 »

  1.   

    某点 pg.TranslateTransform(p.X, p.Y);
    g.RotateTransform(45);
    g.TranslateTransform(-p.X, -p.Y);DrawMyRuler( g );
      

  2.   


    private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;            Pen pen = new Pen(Brushes.Blue);
                //初始半径
                float r0 = 20;
                //圆心
                float x0 = 140;
                float y0 = 140;            //圆的宽度和高度
                float width = 0;
                float height = 0;
                float x = 100;
                float y = 100;
                //圆半径的递增数量
                float d = 2 * r0;
                //画圆
                for (int i = 0; i < 3; i++)
                {
                    //计算当前圆的宽度和高度
                    width = (r0 + d * i) * 2;
                    height = (r0 + d * i) * 2;
                    //计算当前圆的左上角顶点坐标
                    x = x0 - width / 2;
                    y = y0 - height / 2;
                    //画圆
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    g.DrawEllipse(pen, x, y, width, height);
                }
                //画刻度条
                pen.Color = Color.Black;//黑笔画线
                g.DrawLine(pen, x0 - 5 * r0 - 2 * r0 / 5, y0, x0 - 3 * r0 / 5, y0);//线条
                //画刻度
                for (int j = 0; j < 8; j++)
                {
                    for (int i = 0; i < 13; i++)
                    {
                        if (i % 6 == 0)
                        {
                            g.DrawLine(pen, x0 - 5 * r0 - 2 * r0 / 5 + 2 * r0 * i / 5, (float)(y0 - 1.5 * r0 / 5), x0 - 5 * r0 - 2 * r0 / 5 + 2 * r0 * i / 5, (float)(y0 + 1.5 * r0 / 5));
                        }
                        else
                        {
                            g.DrawLine(pen, x0 - 5 * r0 - 2 * r0 / 5 + 2 * r0 * i / 5, y0 - r0 / 5, x0 - 5 * r0 - 2 * r0 / 5 + 2 * r0 * i / 5, y0 + r0 / 5);
                        }
                    }
                }
            }
      

  3.   

    谢谢,搞定了……呵呵……顺便问下,在Compact Framework中要怎么做,他好像没有这个旋转的方法哦
      

  4.   

    嗯,但是在Compact Framework中怎么实现啊
      

  5.   

    RotateTransform ,TranslateTransform .net cf 上都是不支持的
    需要自己写函数来支持
      

  6.   

    是的  我后来也是自己算的  甚至用上了sin cos
      

  7.   

    天哪……我更夸张,用开根号了,并且画出来的图还不标准,因为其参数是int型double型转换会有误差
      

  8.   

    见识了,,学习噢。正好最近弄GDI,。。接分升级。、、
      

  9.   

    sin,cos好像不可以,因为sin(double d)的是弧度不是角度,所以cos(45)=0.5…而不是0.7几
      

  10.   

    CF 可以画弧线不?好像不支持DrawArc吧,就只要画圆的一部分
      

  11.   

    回来再多回复一句
    看下计算机图示学的书,里面有画弧线的完整算法,而且是只用整数逐点画的,比用cos sin好的多(快,效率高)另外,sin如果用弧度做参数,你可以 角度* pi /180 换算