先得到中点, 用TranslateTransform将原点设为该点, 再调用RotateTransform

解决方案 »

  1.   

    先用TranslateTransform把原点移到图形的中心,再用RotateTransform旋转,知道仿射变换吗,知道的话可以直接设Transform属性用Matrix,可以看一下C# wndows 程序设计,charles petzold写得,里面有一章介绍了
      

  2.   

    假如x,y是中心点,grfx.TranslateTransform(x,y)是不是就是将原点移到中心点?;
      

  3.   

    这个好像不是这样的吧,楼上说的书我也有,不过给的例子都是没有绕中心旋转的,而是绕屏幕中心旋转的,grfx.TranslateTransform(x,y)移动后,还是围绕一个点发散似的旋转,而不是绕中心旋转的.
      

  4.   

    我猜你想做个时钟控件吧。可以参考这个:
    http://www.thecodeproject.com/cs/miscctrl/clock.asp?target=clock
    http://www.thecodeproject.com/useritems/simpleclock.asp?target=clock即使你不是做时钟控件,同样对你的问题有效。
      

  5.   

    http://www.thecodeproject.com/useritems/simpleclock.asp?target=clock
      

  6.   

    to 假如x,y是中心点,grfx.TranslateTransform(x,y)是不是就是将原点移到中心点?;要确保这一点, 在此句之前调用ResetTransform 
      

  7.   

    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);grfx.ResetTransform();
    grfx.TranslateTransform(50,20);
    grfx.RotateTransform(20);
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
    这个效果吗,两条线段并不是中心相交的,我不是要实现时钟,时钟是绕
    某一点放射旋转的,我要的是绕图形本身的中点旋转形成中心相交的线段
      

  8.   

    grfx.TranslateTransform(50,20);
    grfx.RotateTransform(20);
    grfx.TranslateTransform(-50,-20);
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
      

  9.   

    不回吧, 兄弟! 这是我测试用的代码, 你试试看
    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics grfx = e.Graphics;
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
    Rectangle r = new Rectangle(50, 20, 0, 0);
    r.Inflate(1, 1);
    grfx.DrawRectangle(Pens.Black, r); grfx.TranslateTransform(50,20);
    grfx.RotateTransform(45);
    grfx.TranslateTransform(-50,-20);
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
    }
      

  10.   

    to cheng_young(古道西风瘦马) 我还是那样的结果,你可以将完整程序发给我吗?
      

  11.   

    //csc test.cs
    using System; 
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Drawing2D;class Test : Form
    {
    Test()
    {
    }
    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics grfx = e.Graphics;
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
    Rectangle r = new Rectangle(50, 20, 0, 0);
    r.Inflate(1, 1);
    grfx.DrawRectangle(Pens.Black, r); grfx.TranslateTransform(50,20);
    grfx.RotateTransform(45);
    grfx.TranslateTransform(-50,-20);
    grfx.DrawLine(new Pen(Color.Red),20,20,80,20);
    }
    static public void Main() 
    {
    Application.Run(new Test());
    }
    }