已知圆周上的3个坐标点求圆心半径。 获得圆心半径后,求弧的2个夹角 。如
a(1,1) b(3,1) c(2,2) a为起始点, b为结束点 , c为 圆周上面的一个坐标点。 先求出圆心,和半径, 然后在算 圆弧的2个夹角。 我用的是C# 开发的,高中数学忘记的差不多了。求各位大侠帮助。 在这里声明是圆周上面的3个坐标点,不是圆上面的3个坐标点。 分不够可以加。 |
已知圆弧的起始点结束点和圆心求起始角和终止角
你看下是不是这意思,圆心和半径算出来了,圆弧的夹角不知道你指哪个角,不过现在有圆心和半径,计算角度应该也不难了
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;
}
}
}
2个弧 的角度, 其实就是画圆弧。 就是说画弧的时候 不要2条弧的角度
@趁机: 可以画个图说明一下吗?你说的“2个弧的角度”还是没弄明白要求哪个地方的度数。
@LCM: C# 已知圆弧的起始点结束点和圆心求起始角和终止角 不论顺时针和逆时针
有圆周上三个坐标点可以得出圆心O和半径,LZ说的“圆弧两个夹角”没弄清楚那2个夹角?
计算机图形学,搜吧。
圆心坐标的公式:http://www.wolframalpha.com/input/?i=center+of+circle+through++%28x1%2Cy1%29%2C+%28x2%2Cy2%29%2C+and++%28x3%2Cy3%29