对于圆形,矩形和三角形c ++,在坐标内计算点数

时间:2016-03-15 22:17:57

标签: c++

我正在尝试制作一个程序来计算圆,三角形和四边形多边形内的点数。我有大约3500个坐标,我希望能够找出这些形状中坐标数的计数,例如对于圆我想要放置中心坐标和半径并找到计数。或者对于像方形一样的形状,我目前有一个公式来获得4分,并使用冒泡排序,这样我就可以按照点数计算区域的方式,但我想我会绕过这个错误的方式,我刚刚开始使用这个代码而且会把它放好,但是我请不要忘了,因为我只是试着在填充它之前先把它弄清楚。

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

using namespace std;

void bubblesort(vector<double>& vec) 
{
double s = vec.size();
for (int i=0; i<s; i++) 
    {
    for (int j=i+1; j<s; j++) 
        {
        if (vec[i] < vec[j]) 
            {
            double x = vec[i];
            vec[i] = vec[j];
            vec[j] = x;
            }
        }
    }
}

void squarecount(vector<double>& a, vector<double>& b)
{
    // I am thinking here to put the x,y coordinates, linking each two and getting 4 equations counting the number satisfying all 4 inequalities
}

int main ()
{
    double a;
    cout << "Please enter the corresponding numberthe shape for which you want to find the count of in your data;" << endl;
    cout << "Circle (1)" << endl;
    cout << "Triangle (2) " << endl;
    cout << "4 Sided Polygon (3)" << endl;
    cin >> a;

    if ( a == 1)
    {
        return 0;
    }
    else if (a == 2)
    {
        return 0;
    }
    else if (a == 3)
    {
        vector<double> data1;
        vector<double> data2;
        // 4 Sided Polygon
        double x1, x2, x3, x4, y1, y2, y3, y4;
        cout << "Enter the first x coordinate then press enter, then the corresponding y coordinate" << endl;
        cin >> data1[0];
        cin >> data2[0];
        cout << "Enter the second x coordinate then press enter, then the corresponding y coordinate" << endl;
        cin >> data1[1];
        cin >> data2[1];
        cout << "Enter the second x coordinate then press enter, then the corresponding y coordinate" << endl;
        cin >> data1[2];
        cin >> data2[2];
        cout << "Enter the second x coordinate then press enter, then the corresponding y coordinate" << endl;
        cin >> data1[3];
        cin >> data2[3];
        bubblesort(data1);
        bubblesort(data2);
    }
    else
    {
        cout << "Invalid Input!" << endl;
        cout << "Please enter either 1 for a circle, 2 for a triangle or 3 for a a 4 sided pollygon" << endl;

    }


 }

1 个答案:

答案 0 :(得分:1)

首先,如果您要写入SELECT,首先应使用vectorpush_back(.)向量。我不确定你想要使用排序算法。

此外,没有必要重新发明轮子。如果点在多边形(或圆形)内,则存在要检查的现有算法。您需要做的就是测试所有点并计算形状内的点数。 圆是微不足道的:只需检查从点到中心的距离是否小于半径。 多边形稍微复杂一些:point in polygonray-casting, even-odd rule algorithm可以像这样实现:

resize

在这里,检查x = 0,...,10和y = 0,...,10的所有点是否在里面

  1. 带角(3,2),(5,6)和(8,4)的三角形

  2. 半径为2.5且中心(5,4)

  3. 的圆

    请注意,光线投射算法对于更多数量的角也有效(对于更多数量的角,角的顺序定义多边形)。