坐标系转换问题……急急急!!!

usxue 2003-04-21 11:56:27
我想在窗体上画一个图形,但是系统的坐标系是x右正,y下正,
我现在要在某一点比如:(100,600)这点为原点,并且x右为正,y上为正,
怎么转换啊??
TransformPoints,RotateTransform也不行啊,
急急!!!
谢谢!!!
...全文
56 点赞 收藏 19
写回复
19 条回复
banping 2003年04月28日
可以呀!
这是通过坐标重新画的
回复 点赞
usxue 2003年04月24日
汉字行吗?
有没有变成倒的了啊?
回复 点赞
banping 2003年04月22日
人为计算出公式呀!计算出原来的坐标系中每点与转换后的坐标系中的每个点!
xp:有图上的坐标系的坐标!(graph)
yp:
xr;真实坐标系的坐标!(real)
yr;

xp=(xr+xd)scale;
yp=-(yr+yd)scale;
xd=-(xov-(wp/2)/scale);
yd=-(yov+(hp/2)/scale);

scale:放大缩小比例!
xov:view plane的中心点x坐标
yov:
wp:graph宽度
hp:高度!

此公式调试通过,没有任何问题!
含义表示:在一个真实坐标系中的任意一为中心(xov,yov)将wp*scale,hp*scale范围显示在graph上!
费了不少脑细胞!
回复 点赞
banping 2003年04月22日
简单呀!让我想想!给个公式给你吧!
回复 点赞
cheng_young 2003年04月22日
还原用ResetTransform就行了
但坐标值就不一致了, 这样凑合着用吧, :-)
float x=50.0f, y=50.0f;
g.ResetTransform();
g.TranslateTransform(0, ClientSize.Height-2*y);
g.DrawString("hello", Font, new SolidBrush(ForeColor), x, y);
回复 点赞
usxue 2003年04月22日
是3*3矩阵吗?不是3*2啊?
图形转换成:
g.Transform = new Matrix(1.0f, 0.0f, 0.0f, -1.0f, 100.0f, 600.0f);
怎么再把他还原成原来没有转换的呢?
谢谢!!!
急急急!!!
回复 点赞
顾君彦 2003年04月21日
(x,窗体高度-y)

试试看
回复 点赞
aspcn 2003年04月21日
GDI+中的矩阵是3*3矩阵,Transform会将整个用户区每一个点都进行计算,当然一转动就会变了啊.

如果不想一个个的点重新计算,那你就把图和文字分开来画吧.
回复 点赞
usxue 2003年04月21日
真的没人回答呢??
急啊!
回复 点赞
usxue 2003年04月21日
明天再来!
回复 点赞
usxue 2003年04月21日
1000可用分+100专家分解决这个问题:
谢谢!!!
急!!!
回复 点赞
zag 2003年04月21日
gz
回复 点赞
usxue 2003年04月21日
真的没人回答啊??
回复 点赞
usxue 2003年04月21日
轴转是转好了,
但是字体是倒的,怎么办??
我这样转的:
Graphics g = this.CreateGraphics();
g.Transform = new Matrix(1.0f, 0.0f, 0.0f, -1.0f, 100.0f, 600.0f);

字怎么改啊??变成倒的了!
急急急啊!
谢谢!
回复 点赞
usxue 2003年04月21日
还是不行啊,
怎么办啊?
帮帮忙啊!
很急的啊!
谢谢!
回复 点赞
cheng_young 2003年04月21日
Graphics g = e.Graphics;
g.Transform = new Matrix(1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
g.TranslateTransform(0, -ClientSize.Height);
Pen pen = new Pen(ForeColor);
g.DrawLine(pen, 0, 0, 100, 600);
回复 点赞
shmily_nnx 2003年04月21日
Graphics对象里有平移坐标的,自己看看吧,我现在在装VSNET慢呐:)
回复 点赞
zhaoao 2003年04月21日
gz
回复 点赞
SmallCase 2003年04月21日
up
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告