首页 新闻 会员 周边 捐助

高中算法的问题

0
悬赏园豆:50 [已解决问题] 解决于 2011-12-23 19:01
已知圆周上的3个坐标点求圆心半径。 获得圆心半径后,求弧的2个夹角 。如

  a(1,1) b(3,1) c(2,2) a为起始点, b为结束点 , c为 圆周上面的一个坐标点。 

  先求出圆心,和半径, 然后在算 圆弧的2个夹角。 我用的是C# 开发的,高中数学忘记的差不多了。求各位大侠帮助。


  在这里声明是圆周上面的3个坐标点,不是圆上面的3个坐标点。 分不够可以加。
问题补充:

已知圆弧的起始点结束点和圆心求起始角和终止角

趁机的主页 趁机 | 初学一级 | 园豆:22
提问于:2011-11-14 21:11
< >
分享
最佳答案
0

你看下是不是这意思,圆心和半径算出来了,圆弧的夹角不知道你指哪个角,不过现在有圆心和半径,计算角度应该也不难了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
internal class Program
{
private static void Main(string[] args)
{
double x1;
double y1;
double x3;
double y3;
double a;
double b;
double c;
double d;
double e;
double f;
double x;
double y;
double x2;
double y2;
Console.WriteLine("请输入x1 y1 x2 y2 x3 y3,其间以空格分隔,输入完成后按回车键进行计算");

x1 = ReadToWhiteSpace(true);
y1 = ReadToWhiteSpace(true);
x2 = ReadToWhiteSpace(true);
y2 = ReadToWhiteSpace(true);
x3 = ReadToWhiteSpace(true);
y3 = ReadToWhiteSpace(true);

//三点一线或三个点有两个或三个点重合,则不能构成圆
if (InvalidPoint(x1,y1,x2,y2,x3,y3))
{
Console.WriteLine("三点不构成圆!");

Console.ReadKey();
return;
}

a = 2*(x2 - x1);
b = 2*(y2 - y1);
c = x2*x2 + y2*y2 - x1*x1 - y1*y1;
d = 2*(x3 - x2);
e = 2*(y3 - y2);
f = x3*x3 + y3*y3 - x2*x2 - y2*y2;
x = (b*f - e*c)/(b*d - e*a);
y = (d*c - a*f)/(b*d - e*a);

Console.WriteLine(string.Format("圆心为({0},{1}),半径为{2}", x, y, Math.Sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1))));

Console.ReadKey();
return ;
}
///<summary>
/// p1(x1,y1),p2(x2,y2),p(x,y)
/// 判断p是否可以和p1,p2三点组成直线
///</summary>
///<returns></returns>
private static bool InvalidPoint(double x1, double y1, double x2, double y2, double x, double y)
{
if (x1 == x2 && y1 == y2) //已知两点是重复的两点
return true;
else if (x1 == x2)//与X轴垂直,斜率无穷大
{
if (x == x1)
return true;
else
return false;
}
else if (y1 == y2)//与X轴平行,斜率为0
{
if (y == y1)
return true;
else
return false;
}
else
{
if (x == x1 && y != y1)
return false;
else if (x == x1 && y == y1)
return true;
else if (Convert.ToDouble(y1 - y2) / Convert.ToDouble(x1 - x2) == Convert.ToDouble(y1 - y) / Convert.ToDouble(x1 - x))
{
return true;
}
}
return false;
}

private static double ReadToWhiteSpace(bool skipleadingwhitespace)
{
string input = "";
char nextchar;
if (skipleadingwhitespace)
{
while (char.IsWhiteSpace(nextchar = (char)Console.Read()))
{
}
input += nextchar;
}
while (!char.IsWhiteSpace(nextchar = (char)Console.Read()))
{
input += nextchar;
}
double result = 0;
double.TryParse(input, out result);
return result;
}
}
}
收获园豆:30
LCM | 大侠五级 |园豆:6876 | 2011-11-15 09:53

2个弧 的角度, 其实就是画圆弧。  就是说画弧的时候 不要2条弧的角度

趁机 | 园豆:22 (初学一级) | 2011-11-15 13:24

@趁机: 可以画个图说明一下吗?你说的“2个弧的角度”还是没弄明白要求哪个地方的度数。

LCM | 园豆:6876 (大侠五级) | 2011-11-15 13:47

@LCM: C# 已知圆弧的起始点结束点和圆心求起始角和终止角  不论顺时针和逆时针

趁机 | 园豆:22 (初学一级) | 2011-12-12 17:36
其他回答(4)
0

有圆周上三个坐标点可以得出圆心O和半径,LZ说的“圆弧两个夹角”没弄清楚那2个夹角?

收获园豆:5
lonely_rain | 园豆:752 (小虾三级) | 2011-11-14 22:02
0
收获园豆:5
喬喬AI | 园豆:996 (小虾三级) | 2011-11-14 22:32
0

计算机图形学,搜吧。

收获园豆:5
[CC] | 园豆:61 (初学一级) | 2011-11-15 08:20
0

圆心坐标的公式:http://www.wolframalpha.com/input/?i=center+of+circle+through++%28x1%2Cy1%29%2C+%28x2%2Cy2%29%2C+and++%28x3%2Cy3%29

收获园豆:5
Greatest | 园豆:678 (小虾三级) | 2011-11-23 13:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册