#include <math.h>
#include <stdio.h>
#include <stdio.h>
using namespace std;
double distance(double a[2],double b[2])//求两点间距离,数组a[2]为点a的坐标信息,a[0]为a的x坐标,a[1]为a的y坐标
{
double dis;//两点间距离
double x,y,x2,y2;
x=a[0]-b[0];
y=a[1]-b[1];
x2=x*x;
y2=y*y;
dis=sqrt((x2+y2));//double sqrt(double x)为求平方根函数
return dis;
}
int collinear(double a[2],double b[2],double c[2])//判断三点是否共线,共线返回1
{
double k1,k2;
double kx1,ky1,kx2,ky2;
if(a[0]==b[0]&&b[0]==c[0]) return 1;//三点横坐标都相等,共线
else
{
kx1=b[0]-a[0];
kx2=b[0]-c[0];
ky1=b[1]-a[1];
ky2=b[1]-a[1];
k1=ky1/kx1;
k2=ky2/kx2;
if(k1==k2) return 1;//AB与BC斜率相等,共线
else return 0;//不共线
}
}
double curvature(double a[2],double b[2],double c[2])//double为数据类型,
{ //数组a[2]为点a的坐标信息,a[0]为a的x坐标,a[1]为a的y坐标
double cur;//求得的曲率
if(collinear(a[2],b[2],c[2])==1)//判断三点是否共线
{
cur=0.0;//三点共线时将曲率设为某个值,0
}
else
{
double radius;//曲率半径
double dis,dis1,dis2,dis3;//距离
double cosA;//ab确定的边所对应的角A的cos值
dis1=distance(a[2],b[2]);
dis2=distance(a[2],c[2]);
dis3=distance(b[2],c[2]);
dis=dis2*dis2+dis3*dis3-dis1*dis1;
cosA=dis/(2*dis2*dis3);//余弦定理
radius=0.5*dis1/cosA;
cur=1/radius;
}
return cur;
{
double dis;//两点间距离
double x,y,x2,y2;
x=a[0]-b[0];
y=a[1]-b[1];
x2=x*x;
y2=y*y;
dis=sqrt((x2+y2));//double sqrt(double x)为求平方根函数
return dis;
}
int collinear(double a[2],double b[2],double c[2])//判断三点是否共线,共线返回1
{
double k1,k2;
double kx1,ky1,kx2,ky2;
if(a[0]==b[0]&&b[0]==c[0]) return 1;//三点横坐标都相等,共线
else
{
kx1=b[0]-a[0];
kx2=b[0]-c[0];
ky1=b[1]-a[1];
ky2=b[1]-a[1];
k1=ky1/kx1;
k2=ky2/kx2;
if(k1==k2) return 1;//AB与BC斜率相等,共线
else return 0;//不共线
}
}
double curvature(double a[2],double b[2],double c[2])//double为数据类型,
{ //数组a[2]为点a的坐标信息,a[0]为a的x坐标,a[1]为a的y坐标
double cur;//求得的曲率
if(collinear(a[2],b[2],c[2])==1)//判断三点是否共线
{
cur=0.0;//三点共线时将曲率设为某个值,0
}
else
{
double radius;//曲率半径
double dis,dis1,dis2,dis3;//距离
double cosA;//ab确定的边所对应的角A的cos值
dis1=distance(a[2],b[2]);
dis2=distance(a[2],c[2]);
dis3=distance(b[2],c[2]);
dis=dis2*dis2+dis3*dis3-dis1*dis1;
cosA=dis/(2*dis2*dis3);//余弦定理
radius=0.5*dis1/cosA;
cur=1/radius;
}
return cur;