C# 图像旋转函数(绕任意一点旋转)

wxxloveu 2009-11-04 09:46:32
我现在有画了条有刻度的线条,现在要画成米字图形,我就想让这条刻度线饶某点连续旋转45°
...全文
1074 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jicage 2010-07-12
  • 打赏
  • 举报
回复
怎么看不懂啊,那个是正确答案呢??
littlegang 2010-03-03
  • 打赏
  • 举报
回复
回来再多回复一句
看下计算机图示学的书,里面有画弧线的完整算法,而且是只用整数逐点画的,比用cos sin好的多(快,效率高)

另外,sin如果用弧度做参数,你可以 角度* pi /180 换算
dapsxianfeng2010 2010-01-06
  • 打赏
  • 举报
回复
想学习,但是有两个帖子不让我看
wxxloveu 2009-11-05
  • 打赏
  • 举报
回复
lee_b 2009-11-05
  • 打赏
  • 举报
回复
顶。。。来了,快解决问题呀,,好JF,,,,
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
不行的话,那就求坐标咯?斜线的坐标怎么求啊
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovexilove 的回复:]
跟时钟一样
[/Quote]
嗯,但是在Compact Framework中怎么实现啊
lovexilove 2009-11-04
  • 打赏
  • 举报
回复
跟时钟一样
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]
某点

[/Quote]
谢谢,搞定了……呵呵……顺便问下,在Compact Framework中要怎么做,他好像没有这个旋转的方法哦
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gomoku 的回复:]
某点 p
[/Quote]

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);
}
}
}
}

gomoku 2009-11-04
  • 打赏
  • 举报
回复
某点 p

g.TranslateTransform(p.X, p.Y);
g.RotateTransform(45);
g.TranslateTransform(-p.X, -p.Y);

DrawMyRuler( g );
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 builderc 的回复:]
RotateTransform ,TranslateTransform .net cf 上都是不支持的
需要自己写函数来支持
[/Quote]
CF 可以画弧线不?好像不支持DrawArc吧,就只要画圆的一部分
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangjianpro_hotmail 的回复:]
是的  我后来也是自己算的  甚至用上了sin cos
[/Quote]
sin,cos好像不可以,因为sin(double d)的是弧度不是角度,所以cos(45)=0.5…而不是0.7几
lee_b 2009-11-04
  • 打赏
  • 举报
回复
见识了,,学习噢。正好最近弄GDI,。。接分升级。、、
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangjianpro_hotmail 的回复:]
是的  我后来也是自己算的  甚至用上了sin cos
[/Quote]
天哪……我更夸张,用开根号了,并且画出来的图还不标准,因为其参数是int型double型转换会有误差
scdbx1983 2009-11-04
  • 打赏
  • 举报
回复
嗯 大长见识
pop6young 2009-11-04
  • 打赏
  • 举报
回复
学习。
KaKaKaKa 2009-11-04
  • 打赏
  • 举报
回复
是的 我后来也是自己算的 甚至用上了sin cos
lovelan1748 2009-11-04
  • 打赏
  • 举报
回复
接分升级
wxxloveu 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 builderc 的回复:]
RotateTransform ,TranslateTransform .net cf 上都是不支持的
需要自己写函数来支持
[/Quote]
知道哦,让你过来接分呢……
不过你有那些函数不?好难写哦,我就用死方法硬画出来的
加载更多回复(2)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧