На языке C, как найти местоположение точки в шестиугольной форме, разделенной на разные сектора
Я хочу найти местоположение (сектор) точки в шестиугольной или круглой форме, разделенной на 4 различных сектора (sc,s1,s2,s3). Все, что у меня есть, это координаты x и y точки. Основной код, который я написал, приведен здесь, но он не возвращает правильный сектор в соответствии с заданными координатами x и y.
Вот картина для лучшего понимания.
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
#define num_sec 4
int main ()
{
double x, y, angle, radius;
x = 19.0; //x_coordinate of a point
y = -30.1; //y_coordinate of a point
angle = atan2 (y,x) * 180 / PI; // converting Cartesian plan to polar and radians to degrees also the arc angle are negative so to convert them into positive we add 360 in it.
if (angle < 0) angle += 360;
radius = hypot (x, y); // calculating radius
printf ("For x_coordinate=%f and y_coordinate=%f the Angle=%f and the Radius=%f \n\n",x,y,angle,radius);
int sector[num_sec];
char sc, s1, s2, s3;
if (radius <= 157.5) {sector[0] = sc;}
if (radius > 157.5 && angle>0 || angle <= 120) {sector[1] = s1;}
if (radius > 157.5 && angle > 120 || angle <= 240) {sector[2] = s2;}
if (radius > 157.5 && angle > 240 || angle <= 360) {sector[3] = s3;}
printf ("%f %f %f %f",sc,s1,s2,s3);
return 0;
}
3 ответа
Решение
Основываясь на нескольких предположениях, не уверен, что именно SC, S1 должны делать, но я думаю, что я понял, что вы хотите.. если это поможет
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
#define num_sec 4
int main (){
double x, y, angle, radius;
x = 19.0; //x_coordinate of a point
y = -30.1; //y_coordinate of a point
angle = atan2 (y,x) * 180 / PI; // converting Cartesian plan to polar and radians to degrees also the arc angle are negative so to convert them into positive we add 360 in it.
if (angle < 0) angle += 360;
radius = hypot (x, y); // calculating radius
printf ("For x_cordinate=%f and y_cordinate=%f the Angle=%f and the Radius=%f \n\n",x,y,angle,radius);
int sector[num_sec]={0};
if (radius <= 157.5){
sector[0]++;
}
else if (radius > 157.5 && (angle > 0 && angle <= 120)) {
sector[2]++;
}
else if (radius > 157.5 && (angle > 120 && angle <= 240)) {
sector[1]++;
}
else if (radius > 157.5 && (angle > 240 && angle <= 360)){
sector[3]++;
}
printf ("%d %d %d %d",sector[0],sector[1],sector[2],sector[3]);
return 0;
}
sector[0] == sc;
не правильно это должно sector[0] = sc;
внести изменения для всего сектора,
Я думаю, что ваше сравнение неверно. Вы должны проверить, находится ли ваш угол между двумя значениями, чтобы получить сектор. Вам нужно заменить свое ИЛИ (||) на И (&&).
if (radius <= 157.5) {sector = 1;}
if (radius > 157.5 && (angle > 0 && angle <= 120)) {sector = 2;}
if (radius > 157.5 && (angle > 120 && angle <= 240)) {sector = 3;}
if (radius > 157.5 && (angle > 240 && angle <= 360)) {sector = 4;}