为了账号安全,请及时绑定邮箱和手机立即绑定

在以 (0,0) 为图像中心的位图上绘制

在以 (0,0) 为图像中心的位图上绘制

C#
ibeautiful 2022-12-31 10:06:18
我想在位图上画一个箭头,但我希望 (0,0) 坐标是屏幕的中心,所以如果我像这样在 (0,0) 和 (100,100) 之间画一个箭头Point p1 = new Point(0,0);Point p2 = new Point(100,100);graphics.DrawLine(pen, p1, p2);如果位图的大小是 200*200,我希望箭头从中心到右上角。有什么办法可以改变它,让 (0,0) 不在左上角吗?
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

不,没有办法更改绘图系统,使 0,0 不在左上角。您可以让 Graphics 应用转换(请参阅@TaW 的评论),但它有其缺点,例如渲染文本和图像颠倒,或者您可以自己对坐标执行数学转换:


Point ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point p, Rectangle r){


  return new Point(r.Width/2 + p.X, r.Height/2 - p.Y);


}

您想要一条在“您的绘图系统”中从 0,0 到 100,100 的线(其中 0,0 是中心,两个轴的范围是 -100 到 +100)。


Rectangle在使用“0,0 是左上角”坐标系的 200x200画布区域 (the ) 上,您实际上想要一条从 100,100 到 200,0 的线。


此数学将您的 0,0 点转换为 100,100,将您的 100,100 点转换为 200,0。同样,对于其他点,例如 100,-100(您的右下角),它变为 200,200(绘图系统的右下角),而您的 -100,100(您的左上角)变为 0,0(绘图系统的左上角)等


Rectangle r = new Rectangle(200,200);

Point p1 = new ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point(0,0), r);

Point p2 = new ConvertAsIf00IsCenterAndPositiveYGoesUpwards(Point(100,100), r);

graphics.DrawLine(pen, p1, p2);

您可能想将该方法命名为更活泼的名称。


老实说,我想说的是,开发人员可能会发现仅习惯于左上角为 0,0 且下/右为正值的坐标系会更容易、更有效,即使这与图表有所不同他们在小学数学中习惯的系统,其中 0,0 位于中心,负数向下/向左移动,正数向上/向右移动


查看完整回答
反对 回复 2022-12-31
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号