gotofly100 发表于 2013-1-10 09:44:24

已知3点(x1,y1)(x2,y2)(x3,y3),求圆的c程序

哪位大侠赐教啊

error_dan 发表于 2013-1-10 09:47:02

条件也太少了吧,三点在圆上还是在什么地方?如果是在圆上直接取三点坐标做三角形然后求这个三角形的外接圆.

snoopyzz 发表于 2013-1-10 09:47:40

已知3点就可以算圆心和半径了,普通的画面程序就可以用了...


不会算圆心的自己补初高中数学去

gold 发表于 2013-1-10 09:52:42

error_dan 发表于 2013-1-10 09:47 static/image/common/back.gif
条件也太少了吧,三点在圆上还是在什么地方?如果是在圆上直接取三点坐标做三角形然后求这个三角形的外接圆. ...

三点的条件还少啊?圆上的三点当然指的是在圆周了.

设圆心为(x,y),那么(x-x1)*(x-x1)+(y-y1)*(y-y1) = (x-x2)*(x-x2)+(y-y2)*(y-y2)
(x-x1)*(x-x1)+(y-y1)*(y-y1) = (x-x3)*(x-x3)+(y-y3)*(y-y3)

根据这两个方程求出圆心,然后再求R
R*R= (x-x1)*(x-x1)+(y-y1)*(y-y1)

gold 发表于 2013-1-10 09:54:06

简化后的方程组都是一元一次了,要么无解,要么唯一解

Flyback 发表于 2013-1-10 11:49:56

记得是初中几何学的,没有重合点,且不在一条直线上,有解

jesson 发表于 2013-1-10 12:33:41

不在同一直线上的三点确定一个圆,

loveye21 发表于 2013-1-10 12:37:56


/*八分点画圆函数(x y)指定线起点所在行的位置;列的位置*/
void LCD_PlotC(int x,int y,int xc,int yc,uint Color)
{
    LCD_Point(xc+x,yc+y,Color);LCD_Point(xc+x,yc-y,Color);
    LCD_Point(xc-x,yc+y,Color);LCD_Point(xc-x,yc-y,Color);
    LCD_Point(xc+y,yc+x,Color);LCD_Point(xc+y,yc-x,Color);
    LCD_Point(xc-y,yc+x,Color);LCD_Point(xc-y,yc-x,Color);
}
/*画圆(xc yc)圆心的行坐标’列坐标‘ r 半径*/
void GUI_Round(uint X,uint Y,uint r,uint Color)
{
    int x,y,d;
    y = r;
    d = 3 - (r + r);
    x = 0;
    while(x<=y)
    {
      LCD_PlotC(x,y,X,Y,Color);
      if(d < 0)
            d += (x + x + x + x) + 6;
      else
         {
            d+=((x - y) + (x - y) + (x - y) + (x - y)) + 10;
            y = y - 1;
         }
      x = x + 1;
    }
}

能帮上忙不?

gotofly100 发表于 2013-1-17 18:20:52

谢谢上面各位,
页: [1]
查看完整版本: 已知3点(x1,y1)(x2,y2)(x3,y3),求圆的c程序