
C语言编程 弧度角度
展开全部
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
typedef struct point
{
int x, y;
} Point;
typedef struct line
{
int a,b,c;
} Line;
int point_equal( Point p1, Point p2 )
{
if ( p1.x == p2.x && p1.y == p2.y )
return 1;
return 0;
}
int get_line( Point p1, Point p2, Line *l )
{
if ( point_equal( p1, p2 ) )
return -1;
int m = ( p2.y - p1.y ); /** 两点式 ***/
int n = ( p2.x - p1.x );
l->a = m;
l->b = -1*n;
l->c = -1*m*p1.x + n*p1.y;
return 0;
}
int get_intersection( Line l1, Line l2, Point *p3 )
{
if ( (l1.a == 0 && l1.b == 0) || (l2.a==0&&l2.b==0) )
return -2;
if ( l1.a*l2.b == l2.a*l1.b )
return -1;
p3->x = ( l1.b*l2.c - l2.b*l1.c ) / ( l1.a*l2.b - l1.b*l2.a );
p3->y = ( l1.a*l2.c - l2.a*l1.c ) / ( l1.b*l2.a - l1.a*l2.b );
return 0;
}
double get_angle( Point inter, Point a, Point b )
{
int va_x = abs(a.x - inter.x);
int va_y = abs(a.y - inter.y);
int vb_x = abs(b.x - inter.x);
int vb_y = abs(b.y - inter.y);
int product_value = (va_x * vb_x ) + ( va_y * vb_y );
double va_val = sqrt( va_x * va_x + va_y * va_y );
double vb_val = sqrt( vb_x * vb_x + vb_y * vb_y );
double cos_val = product_value / ( va_val * vb_val );
if ( cos_val < -1 && cos_val > -2 )
cos_val = -1;
else if ( cos_val > 1 && cos_val < 2 )
cos_val = 1;
return acos(cos_val);
}
int main()
{
int n=0, i=0, a=0, b=0, c=0, d=0;
Point *p, intersection, pa, pb;
Line A, B;
scanf( "%d", &n );
p = (Point*)malloc( n*sizeof(Point) );
for( i=0; i<n; i++ )
scanf( "%d %d", &p[i].x, &p[i].y );
scanf( "%d %d %d %d", &a, &b, &c, &d );
get_line( p[a-1], p[b-1], &A );
get_line( p[c-1], p[d-1], &B );
get_intersection( A, B, &intersection );
if ( point_equal( p[a-1], intersection ) )
{
pa.x = p[b-1].x;
pa.y = p[b-1].y;
}
else
{
pa.x = p[a-1].x;
pa.y = p[a-1].y;
}
if ( point_equal( p[c-1], intersection ) )
{
pb.x = p[d-1].x;
pb.y = p[d-1].y;
}
else
{
pb.x = p[c-1].x;
pb.y = p[c-1].y;
}
double angle = get_angle( intersection, pa, pb );
printf( "%.2f\n", angle );
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2024-08-07 广告
标定板认准大凡光学科技,专业生产研发厂家,专业从事光学影像测量仪,光学投影测量仪.光学三维测量仪,光学二维测量仪,光学二维测量仪,光学三维测量仪,光学二维测量仪.的研发生产销售。东莞市大凡光学科技有限公司创立于 2018 年,公司总部坐落于...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询