c#picturebox中画圆弧

波霸奶茶不要奶茶 2014-12-16 10:39:00
各位大侠,我现在在窗体上有个picturebox然后我想在里面画圆弧不知该如何画呢??
我先用drawline花了两条直线(这是成功的),然后我想画这两条直线的切线弧,在存储的时候我有这段弧线的相关信息:起点,终点,圆心,半径和弧长。我想要在picturebox上画出切线弧但一直不成功,drawArc的参数rectangle我没法确定啊,startangle也不确定,各位大侠有什么办法能解决吗??c#是否有别的便捷的方法画出圆弧啊,总觉得drawarc方法不要用,定位太麻烦。。。
多谢各位大侠~~~
...全文
503 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_35203740 2016-06-02
  • 打赏
  • 举报
回复
楼主还有当时的代码吗?我遇到了同样的问题
  • 打赏
  • 举报
回复

问题已解决,现在发现编程遇到的很多问题还是得靠自己的领悟,依然是用的drawArc方法,只是这次自己的rectangle设置对了,感谢楼上的各位抽出时间回答问题,但是我还是想说作为新手真的有很多不懂得即使自己百度查资料依然还是有不懂得地方,有时候高手的一句话就能点拨我们,希望高手们在回答的时候不要太高冷,万分感谢。
  • 打赏
  • 举报
回复
引用 8 楼 good_jobs 的回复:
GraphicsPath gp=new GraphicsPath();
gp.AddLine();
gp.AddArc();
gp.CloseCurver();

Graphics.DrawPath(Pens.Red,gp);

这。。。大侠这个跟g.drawArc(),差不多啊,需要的参数都是一模一样的,我就是参数问题没法解决。。。现在startangle和sweepangle都解决了,就是rectangle无法定位。。。。
运行结果图如下:
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你看msdn,对各个参数都有说明的,在看不懂,百度总会吧
我知道各个参数的意思,也百度过了,我的问题是画出的圆弧我没法定位啊??我要求它正好首尾都在两条直线上,成为两条直线的切线弧,我摘抄了一个网上的代码,运行后两条直线出来了,弧线看不见啊。。。。 Graphics g = this.pictureBox_CurveDivide.CreateGraphics(); Pen mypen = new Pen(System.Drawing.Color.Black, 2); public void DrawArc(Arc arc,Graphics g,Pen mypen) { XYZ startpoint = FindStartpoint(arc.GetEndPoint(0), arc.GetEndPoint(1));//圆弧的起点也是第一条直线的终点 XYZ endpoint = FindEndpoint(arc.GetEndPoint(0), arc.GetEndPoint(1));//圆弧的终点也是第二条直线的起点 XYZ center = arc.Center;//圆弧的圆心坐标 double r = arc.Radius;//圆弧的半径 double k = Math.Sqrt((endpoint.X - startpoint.X) * (endpoint.X - startpoint.X) + (endpoint.Y - startpoint.Y) * (endpoint.Y - startpoint.Y));//圆弧起始/终止点之间的直线距离 double x = center.X - r; double y = center.Y - r; double width = 2 * r; double height = 2 * r; RectangleF myrectangle = new RectangleF((float)x, (float)y, (float)width, (float)height); double startangle = Math.Atan(startpoint.Y / startpoint.X); double sweepangle = 2 * Math.Asin((k / 2) / r); g.DrawArc(mypen, myrectangle, (float)startangle, (float)sweepangle); } 大神,求指教~~picturebox上完全看不到弧线。。。。
bdmh 2014-12-16
  • 打赏
  • 举报
回复
你看msdn,对各个参数都有说明的,在看不懂,百度总会吧
good_jobs 2014-12-16
  • 打赏
  • 举报
回复
GraphicsPath gp=new GraphicsPath(); gp.AddLine(); gp.AddArc(); gp.CloseCurver(); Graphics.DrawPath(Pens.Red,gp);
  • 打赏
  • 举报
回复
引用 6 楼 wangyue4 的回复:
不是啊。做弧还是要用DrawArc方法的。但是这个方法不是需要知道那两个角度和圆心么。这个需要你计算啊。我说的那些是计算圆心
骚瑞啊,刚想点引用的,不小心点到丢个板砖了。。。。。 DrawArc(Pen, Rectangle, Single, Single),需要两个角度,圆心用来怎么用,固定Rectangle的位置么??大侠,该怎么固定啊??不太明白,求指教啊~~新人勿怪~~~
wangyue4 2014-12-16
  • 打赏
  • 举报
回复
不是啊。做弧还是要用DrawArc方法的。但是这个方法不是需要知道那两个角度和圆心么。这个需要你计算啊。我说的那些是计算圆心
  • 打赏
  • 举报
回复
引用 3 楼 wangyue4 的回复:
需要你自己算圆心在哪里,已知起始点和结束点,两点的中点为圆心,半径你随意设置做圆。圆心是这个圆和起始点与结束点连线的垂线交点


public void DrawArc(Arc arc,Graphics g,Pen mypen,float offsety)
{
XYZ startpoint = FindStartpoint(arc.GetEndPoint(0), arc.GetEndPoint(1));
XYZ endpoint = FindEndpoint(arc.GetEndPoint(0), arc.GetEndPoint(1));
//XYZ center = arc.Center;
XYZ center = new XYZ((startpoint.X+endpoint.X)/2,(startpoint.Y+endpoint.Y)/2,0);
double r = arc.Radius;
//TaskDialog.Show("startpoint", startpoint.ToString());
//TaskDialog.Show("endpoint", endpoint.ToString());
//TaskDialog.Show("center", center.ToString());
//TaskDialog.Show("r", r.ToString());
double k = Math.Sqrt((endpoint.X - startpoint.X) * (endpoint.X - startpoint.X) + (endpoint.Y - startpoint.Y) * (endpoint.Y - startpoint.Y));
double x = (center.X - r)*8+0;
double y = offsety-(center.Y - r)*8;
double width = 2 * r;
double height = 2 * r;
RectangleF myrectangle = new RectangleF((float)x, (float)y, (float)width, (float)height);
double startangle = Math.Atan(startpoint.Y / startpoint.X);
double sweepangle = 2 * Math.Asin((k / 2) / r);
g.DrawArc(mypen, myrectangle, (float)startangle, (float)sweepangle);
}


还是不行哎。。。。求指教啊~~
  • 打赏
  • 举报
回复
引用 3 楼 wangyue4 的回复:
需要你自己算圆心在哪里,已知起始点和结束点,两点的中点为圆心,半径你随意设置做圆。圆心是这个圆和起始点与结束点连线的垂线交点
大侠你的意思是我不用Arc本身的属性,而是根据起始/终止点算出相对于弧的圆心, 然后还是依照我贴的那个代码继续运行吗??只是修改下圆心??
wangyue4 2014-12-16
  • 打赏
  • 举报
回复
需要你自己算圆心在哪里,已知起始点和结束点,两点的中点为圆心,半径你随意设置做圆。圆心是这个圆和起始点与结束点连线的垂线交点

110,502

社区成员

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

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

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