C#Windows窗体-图形-打印X、Y点,带+;Y

C#Windows窗体-图形-打印X、Y点,带+;Y,c#,.net,forms,winforms,graphics,C#,.net,Forms,Winforms,Graphics,这个问题已经得到部分回答(),如果我没有找到一个简单的解决方案,我很抱歉 我需要绘制来自标准图形的X,Y图形点,其中原点(0,0)位于表单的中心,+Y坐标沿垂直方向移动。请参见随附的标准X、Y绘图图 如何重新配置窗体,使原点(0,0)位于窗体的中心而不是左上角,并且以垂直方式绘制+Y坐标?注意:我确实在尝试多边形命中测试,但在标准的X,Y绘图图中,原点位于中间,而不是像.Net Windows窗体那样位于左上角。以下是我想要的: 命中测试-我真的想在这里做一个命中测试,而不是创建一个图形,所以我

这个问题已经得到部分回答(),如果我没有找到一个简单的解决方案,我很抱歉

我需要绘制来自标准图形的X,Y图形点,其中原点(0,0)位于表单的中心,+Y坐标沿垂直方向移动。请参见随附的标准X、Y绘图图

如何重新配置窗体,使原点(0,0)位于窗体的中心而不是左上角,并且以垂直方式绘制+Y坐标?注意:我确实在尝试多边形命中测试,但在标准的X,Y绘图图中,原点位于中间,而不是像.Net Windows窗体那样位于左上角。以下是我想要的:

  • 命中测试-我真的想在这里做一个命中测试,而不是创建一个图形,所以我认为我不能使用第三方图形库
  • 点-我将使用PointF点,我不想“翻转”或变换单个点,我宁愿在表单加载时重新配置表单
  • Windows窗体设置-我想要一个解决方案,用ScaleTransform之类的东西重新配置窗体或容器,而不是像上面提到的那样翻转点
  • Windows窗体大小-我不需要知道窗体的像素宽度,在窗体启动时,应该对此进行处理
  • Windows窗体大小调整-大小调整对我来说并不重要,在应用程序启动后可以是静态的
  • 谢谢你的帮助, 提姆
    要绘制图形,请使用TranslateTransform:

    protected override void OnPaint(PaintEventArgs e) {
      e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
      e.Graphics.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height / 2);
      e.Graphics.FillEllipse(Brushes.Red, new Rectangle(-3, -3, 6, 6));
    }
    
    对于命中测试,还可以使用TranslateTransform和TransformPoints调用:

    protected override void OnMouseDown(MouseEventArgs e) {
      using (Graphics g = this.CreateGraphics()) {
        g.TranslateTransform(this.ClientSize.Width / 2, this.ClientSize.Height / 2);
        Point[] points = new Point[] { e.Location };
        g.TransformPoints(CoordinateSpace.World, CoordinateSpace.Device, points);
        MessageBox.Show(points[0].ToString());
      }      
    }
    

    考虑使用现有的图形库。除非您有非常独特的需求,否则您最好抓取ZedGraph的副本,而不是自己尝试这样做。
    e.Graphics.TranslateTransform(this.ClientSize.Width/2,this.ClientSize.Height/2)然后画出你的点。点0, 0将在中间。注意,链接帖子中所接受的答案实际上并没有显示使用TruteTror变换,尽管这是关键!