C# 图像旋转函数(绕任意一点旋转) 我现在有画了条有刻度的线条,现在要画成米字图形,我就想让这条刻度线饶某点连续旋转45° 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 某点 pg.TranslateTransform(p.X, p.Y);g.RotateTransform(45);g.TranslateTransform(-p.X, -p.Y);DrawMyRuler( g ); 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); } } } } 谢谢,搞定了……呵呵……顺便问下,在Compact Framework中要怎么做,他好像没有这个旋转的方法哦 嗯,但是在Compact Framework中怎么实现啊 RotateTransform ,TranslateTransform .net cf 上都是不支持的需要自己写函数来支持 是的 我后来也是自己算的 甚至用上了sin cos 天哪……我更夸张,用开根号了,并且画出来的图还不标准,因为其参数是int型double型转换会有误差 见识了,,学习噢。正好最近弄GDI,。。接分升级。、、 sin,cos好像不可以,因为sin(double d)的是弧度不是角度,所以cos(45)=0.5…而不是0.7几 CF 可以画弧线不?好像不支持DrawArc吧,就只要画圆的一部分 回来再多回复一句看下计算机图示学的书,里面有画弧线的完整算法,而且是只用整数逐点画的,比用cos sin好的多(快,效率高)另外,sin如果用弧度做参数,你可以 角度* pi /180 换算 GetResponse()超时问题!非常奇怪的问题 以下查询数据库的语句为什么会提示“Timeout expired” 再次提问:存储过程的查询问题100分 程序的开机启动 抽象类怎么可以出现实例对象呢? 求助!关于线程的问题! 我的OWC图表,客户端浏览器看不了图表。我自己的机器能看,为什么 关于CheckBox的选中问题 mschart画动态柱形 用c#写的dll能不能用在别的语言中,比如C++builder? C# 结构体 struct C#使用参数进行查询
g.RotateTransform(45);
g.TranslateTransform(-p.X, -p.Y);DrawMyRuler( g );
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);
}
}
}
}
需要自己写函数来支持
看下计算机图示学的书,里面有画弧线的完整算法,而且是只用整数逐点画的,比用cos sin好的多(快,效率高)另外,sin如果用弧度做参数,你可以 角度* pi /180 换算