我正在尝试制作一个程序来计算圆,三角形和四边形多边形内的点数。我有大约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;
}
}
答案 0 :(得分:1)
首先,如果您要写入SELECT
,首先应使用vector
或push_back(.)
向量。我不确定你想要使用排序算法。
此外,没有必要重新发明轮子。如果点在多边形(或圆形)内,则存在要检查的现有算法。您需要做的就是测试所有点并计算形状内的点数。 圆是微不足道的:只需检查从点到中心的距离是否小于半径。 多边形稍微复杂一些:point in polygon。 ray-casting, even-odd rule algorithm可以像这样实现:
resize
在这里,检查x = 0,...,10和y = 0,...,10的所有点是否在里面
带角(3,2),(5,6)和(8,4)的三角形
半径为2.5且中心(5,4)
请注意,光线投射算法对于更多数量的角也有效(对于更多数量的角,角的顺序定义多边形)。