天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 162|回复: 0

临界多边形算法 c++

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-3-15 20:57:47 | 显示全部楼层 |阅读模式
#include <iostream>
#include <vector>
using namespace std;

// 定义点的结构体
struct Point {
    int x, y;
    Point(int x = 0, int y = 0) : x(x), y(y) {}
};

// 计算两点之间的距离
double distance(Point p1, Point p2) {
    return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));
}

// 判断点是否在多边形内部
bool isInside(Point p, vector<Point>& polygon) {
    int n = polygon.size();
    bool flag = false;
    double d;
    for (int i = 0, j = n - 1; i < n; j = i, i++) {
        d = (polygon[i].y - p.y) * (polygon[j].x - polygon[i].x) -
            (polygon[i].x - p.x) * (polygon[j].y - polygon[i].y);
        if (d == 0) {
            return false; // 点在边上
        }
        else if (d > 0) {
            flag = !flag; // 穿过了多边形的一条边
        }
    }
    return flag;
}

// 计算多边形的面积
double polygonArea(vector<Point>& polygon) {
    int n = polygon.size();
    double area = 0.0;
    for (int i = 0, j = n - 1; i < n; j = i, i++) {
        area += (polygon[i].x + polygon[j].x) * (polygon[i].y - polygon[j].y);
    }
    area = abs(area) / 2.0;
    return area;
}

// 临界多边形算法
vector<Point> criticalPolygon(vector<Point>& polygon) {
    vector<Point> criticalPolygon;
    int n = polygon.size();
    for (int i = 0; i < n; i++) {
        // 判断点是否在多边形内部
        if (isInside(polygon[i], polygon)) {
            criticalPolygon.push采用back(polygon[i]);
        }
    }
    return criticalPolygon;
}

int main() {
    vector<Point> polygon = { Point(0, 0), Point(0, 5), Point(5, 5), Point(5, 0) };
    vector<Point> criticalPolygon = criticalPolygon(polygon);

    cout << "The vertices of the critical polygon are:" << endl;
    for (int i = 0; i < criticalPolygon.size(); i++) {
        cout << "(" << criticalPolygon[i].x << ", " << criticalPolygon[i].y << ")" << endl;
    }

    double area = polygonArea(criticalPolygon);
    cout << "The area of the critical polygon is: " << area << endl;

    return 0;
}

 

 

 

 

临界多边形算法 c++
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 09:05 , Processed in 0.155777 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表