<角度>的不规则多边形的内角; 180

时间:2015-03-02 23:24:49

标签: c++ math vector-graphics

我试图用红色计算图中所示的值,即内角。

我有一系列线相交的点,并尝试使用点积,但它只返回最小的角度。我需要全方位的内角(0-359),但似乎找不到符合此标准的内容。

arrow

2 个答案:

答案 0 :(得分:2)

假设您的角度采用标准逆时针格式,则以下情况应该有效:

void angles(double points[][2], double angles[], int npoints){
    for(int i = 0; i < npoints; i++){
        int last = (i - 1 + npoints) % npoints;
        int next = (i + 1) % npoints;
        double x1 = points[i][0] - points[last][0];
        double y1 = points[i][1] - points[last][1];
        double x2 = points[next][0] - points[i][0];
        double y2 = points[next][1] - points[i][1];
        double theta1 = atan2(y1, x1)*180/3.1415926358979323;
        double theta2 = atan2(y2, x2)*180/3.1415926358979323;
        angles[i] = (180 + theta1 - theta2 + 360);
        while(angles[i]>360)angles[i]-=360;
    }
}

显然,如果您为点使用某种数据结构,则需要使用对数据结构的引用替换double points[][2]及其引用。

答案 1 :(得分:1)

您可以使用atan2函数获取全角度范围(-Pi..Pi)

atan2(crossproduct, dotproduct)