社区
C#
帖子详情
圆上任意三点画弧!!!!
xinc
2007-03-31 07:11:47
已知圆上任意三点坐标如何画弧
...全文
823
16
打赏
收藏
圆上任意三点画弧!!!!
已知圆上任意三点坐标如何画弧
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
努力学飞的鸟
2011-05-17
打赏
举报
回复
[Quote=引用 13 楼 dazhu2 的回复:]
给你代码参考一下:你自己再测试一下
float x1, y1, x2, y2, y3, x3;
x1 =200.0f;
y1 =150.0f;
x2 = 380.0f;
……
[/Quote]我现在就在做绘图工具,谢谢,我参考下,呵呵
dazhu2
2007-04-01
打赏
举报
回复
楼主不要忘记给分呀,我在冲2星,呵呵
dazhu2
2007-04-01
打赏
举报
回复
我没有严格测试,你自己再看看
dazhu2
2007-04-01
打赏
举报
回复
给你代码参考一下:你自己再测试一下
float x1, y1, x2, y2, y3, x3;
x1 =200.0f;
y1 =150.0f;
x2 = 380.0f;
y2 = 130.0f;
x3 = 40.0f;
y3 = 200.0f;
float x0, y0,r0;//圆心和半径
float m1, m2,mx1,mx2,my1,my2;
if( Math.Abs(y2 - y1) < 0.0001)
{
m2 = -(x3 - x2) / (y3 - y2);
mx2 = (x2 + x3) / 2.0f;
my2 = (y2 + y3) / 2.0f;
x0 = (x1+x2)/2.0f;
y0 = m2 * (x0 - mx2) + my2;
}
else if (Math.Abs(y3 - y2)<0.0001)
{
m1 = -(x2 - x1) / (y2 - y1);
mx1 = (x1 + x2) / 2.0f;
my1 = (y1 + y2) / 2.0f;
x0 = (x2+x3) / 2.0f;
y0 = m1 * (x0 - mx1) + my1;
}
else
{
m1 = -(x2 - x1) / (y2 - y1);
m2 = -(x3 - x2) / (y3 - y2);
mx1 = (x1 + x2) / 2.0f;
mx2 = (x2 + x3) / 2.0f;
my1 = (y1 + y2) / 2.0f;
my2 = (y2 + y3) / 2.0f;
x0 = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2);
y0 = m1 * (x0 - mx1) + my1;
}
r0 = Convert.ToSingle(Math.Sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1)));
Graphics g = this.pictureBox1.CreateGraphics();
g.DrawEllipse(new Pen(Color.Blue), new RectangleF(x1, y1, 2,2));
g.DrawEllipse(new Pen(Color.Blue), new RectangleF(x2, y2, 2, 2));
g.DrawEllipse(new Pen(Color.Blue), new RectangleF(x3, y3, 2, 2));
//画弧
float k1, k2, k3;//斜率
k1 = (y1 - y0) / (x1 - x0);
k2 = (y2 - y0) / (x2 - x0);
k3 = (y3 - y0) / (x3 - x0);
double[] a = new double[3];//弧度
double[] b= new double[3];//角度
double[] x = new double[3];
double min, max;
double v = 180.0 / 3.14159;//弧度与角度转换
a[0] = Math.Atan(k1);
a[1] = Math.Atan(k2);
a[2] = Math.Atan(k3);
x[0] = x1;
x[1] = x2;
x[2] = x3;
for (int i = 0; i < 3; i++)
{
if (a[i] >= 0)
{
if (x[i] > x0)
{
b[i] = a[i] * v;
}
else if (x[i] < x0)
{
b[i] = 180.0 + a[i] * v;
}
}
else
{
a[i] = Math.Abs(a[i]);
if (x[i] > x0)
{
b[i] =360.0- a[i] * v;
}
else if (x[i] < x0)
{
b[i] = 180.0- a[i] * v;
}
}
}
//寻找最小角度和最大角度
min = b[0];
max = b[0];
for (int i = 1; i < 3; i++)
{
if (b[i] < min)
min = b[i];
if (b[i] > max)
max = b[i];
}
//画弧
g.DrawArc(new Pen(Color.Black), new RectangleF(x0 - r0, y0 - r0, 2 * r0, 2 * r0), (float)min, (float)(max - min));
Generics
2007-04-01
打赏
举报
回复
好家伙,LZ大概问的是给出3个Point: Point A, B,C;如何用Graphics.DrawArc画出弧来吧?怎么就变成了纯几何问题了呢?
dazhu2
2007-04-01
打赏
举报
回复
float x1, y1, x2, y2, y3, x3;
x1 =20.0f;
y1 =50.0f;
x2 = 120.0f;
y2 = 70.0f;
x3 = 40.0f;
y3 = 20.0f;
float x0, y0,r0;//圆心和半径
float m1, m2,mx1,mx2,my1,my2;
m1 = -(x2 - x1) / (y2 - y1);
m2 = -(x3 - x2) / (y3 - y2);
mx1 = (x1 + x2) / 2.0f;
mx2 = (x2 + x3) / 2.0f;
my1 = (y1 + y2) / 2.0f;
my2 = (y2 + y3) / 2.0f;
x0=(m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2);
y0=m1*(x0-mx1)+my1;
r0 = Convert.ToSingle(Math.Sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1)));
ylqmf
2007-04-01
打赏
举报
回复
up
kevin_study
2007-03-31
打赏
举报
回复
ddddddddddddddddddd
甴曱
2007-03-31
打赏
举报
回复
如何圆已经确定,那么,只用两点应该就可以取弧了?有必要三点?
甴曱
2007-03-31
打赏
举报
回复
还有,按照楼主的意思:已知圆上任意三点坐标如何画弧
不是很明白,三点坐标如何确定弧?
甴曱
2007-03-31
打赏
举报
回复
:)如果不用圆规呢?楼上?
syeerzy
2007-03-31
打赏
举报
回复
如果有人研究出来可以只用一次圆规的,希望能分享一下~~~~
如果是计算机题目,太简单了,给出3个点的空间坐标,用参数方程,解2次方程对计算机来说小菜一碟~~~~
甴曱
2007-03-31
打赏
举报
回复
对自己BS一下。
已经忘记如何证明该论题了。:)
哪位给个证明过程嘛。:)
不用程序的,只需要用初中几何学的方法来证明一下。把证明过程写出来。然后用程序来实现应该很简单。
syeerzy
2007-03-31
打赏
举报
回复
如果这个问题再提高难度,仅允许使用圆规不允许使用直尺,同样是有解的,不过步骤比较多也比较复杂~~~ 我还要好好回忆一下。。。。先不贴了~~
如果只允许用直尺不允许用圆规,那么此题无解。
最大难度: 只允许使用2次圆规,完成这个弧。
syeerzy
2007-03-31
打赏
举报
回复
中垂线作法:
1 分别以2个已知点为圆心,以任意一个相同的,大于两点距离一半的长度为半径,分别作圆,两圆相交于A,B 两点
2 连接A,B两点的直线,就是中垂线
syeerzy
2007-03-31
打赏
举报
回复
正确的问题是 只允许使用直尺和圆规,过已知不在一条直线上的任意3个点,作一条弧线。
如果只允许使用直尺和圆规
1 过其中2个点做直线
2 另外再2个点做直线
3 对2个线段做中垂线,两中垂线交于点o
4 以o为圆心,o到任意一个原已知点的距离为半径,作弧。
CAD
三点
画圆与
画弧
核心技巧:告别错误,精准绘图
在计算机辅助设计(CAD)领域,几何约束是精确绘图的基础原理。通过理解点、线、圆等基本图元的数学定义和约束关系,软件能够将设计意图转化为准确的图形。这一技术价值在于将复杂的空间构思标准化、参数化,极大提升了机械设计、建筑制图和工程绘图的效率与精度。其中,基于已知点生成几何图形是核心应用场景,例如通过三个点确定一个圆或一段圆弧。操作时需明确目标图形是整圆还是圆弧,并注意点的输入顺序,尤其是使用ARC命令时,顺序直接影响结果。掌握CIRCLE和ARC命令的区别与标准化操作流程,能有效解决常见的绘图偏差问题,实现
CAD
三点
画圆就是三角形外接圆吗?
三点
画弧
为何不同?
几何学中,不共线的三个点唯一确定一个圆,这是三角形外接圆存在且唯一的基本定理。外心位于三条边中垂线的交点,决定了圆的圆心和半径。CAD中的
三点
画圆命令正是基于这一原理,通过拾取
三点
自动计算圆心与半径,因此用三角形的三个顶点画圆,结果必然是外接圆。而
三点
画弧
则不同,它输出的是外接
圆上
的一段弧,具体是哪一段由点的拾取顺序决定,并可能涉及优弧与劣弧的区分。理解这些概念,不仅能消除对软件操作的疑惑,还能在制图、钣金下料、结构检测拟合等场景中更合理地运用
三点
定圆功能。掌握对象捕捉精度和二次开发批量处理方法,则能让外接
c++
圆上
任意
点坐标计算_已知
圆上
任意
三点
坐标如何编程来计算这个圆的圆心和半径...
在过去的一周时间里一直在计算师兄交代的任务,啥都没学,就一直在干这活。其中呢,我想的一个算法中就用到了本文中的这个小知识(主要就是线性代数和高中的一些知识结合起来)。师兄说做的这个东西的内容要保密,但是我想了一下,本篇的这个内容还是可以说的,这不涉及我做的那些东西的内容。 我想大家应该都知道圆的一般方程吧: 这个平方项前面的系数可以不写A,写1也是一样的(除一下就行)。比如说现在有
圆上
的三个点:...
三点
画圆就是三角形外接圆?CAD中
三点
画弧
和画圆的区别
在几何绘图中,通过三个不共线的点可以唯一确定一个圆,这个圆恰好就是由这三个点构成的三角形的外接圆。其原理在于,圆心位于
任意
两点连线的中垂线交点上,半径即圆心到任一点的距离,这是计算几何中最基础的
三点
定圆算法。在CAD软件中,
三点
画圆命令直接生成完整圆,与三角形外接圆完全重合;而
三点
画弧
仅生成
圆上
的一段弧,其圆心和半径虽与外接圆一致,但点序和中间点位置会影响弧的方向与优劣。理解两者在数学原理和图元类型上的差异,对于CAD建模、脚本绘制以及测量数据的圆拟合都具有重要价值。本文从几何推导到工程实践,详细剖析了三定
MFC之画圆弧
任意
三点
绘制圆弧求弧长
接着 http://blog.csdn.net/ilson_/article/details/77018346 1. 先求出线的方向角(用向量) // 得到两点的角度 // 0 - 360 以 point1 为圆心绕一周 double getAngleFromTwoPoint(CPoint point1, CPoint point2) { double angle = 0; CPoi...
C#
111,128
社区成员
642,534
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章