2014-02-12 5 views
0

Я хочу найти местоположение (сектор) точки в гексагональной или круговой форме, разделенной на 4 разных сектора (sc, s1 , s2, s3). Все, что у меня есть, - это координаты точки x и y. Основной код, который я написал, приведен здесь, но он не возвращает правильный сектор в соответствии с заданными координатами x и y.На языке C, как найти местоположение точки в шестиугольной форме, разделенной на разные сектора

Вот изображение для лучшего понимания.

http://i.imgur.com/ECLEuIB.png

#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; 
} 
+1

Назначение является «=» не '=='. –

+0

В дополнение к вышеприведенному комментарию, что такое 'sc, s1, s2, s3'? Вы не инициализировали значения для него. Полагаю, это бросает мусор. – noufal

ответ

0

основывается на нескольких допущениях, не уверен, что именно подкожно, 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; 
    } 
+0

Большое спасибо :) Большое спасибо :) – user3300098

+0

@ user3300098 только что увидел вашу фотографию, Я сделал некоторые изменения в условиях if else, чтобы точно соответствовать изображению на картинке. если он не работает, просто измените условия, соответствующие вашим критериям. – tesseract

0
sector[0] == sc; 

Не верно оно должно изменение sector[0] = sc; делают для всего сектора,

+0

Изменено и скомпилировано, ничего нового не происходит :( – user3300098

+0

ok, но что такое значение sc, s1, s2, s3? .Ничего не нужно инициализировать. –

0

Я думаю, что ваше сравнение неправильно. Вы должны проверить, находится ли ваш угол между двумя значениями, чтобы получить сектор. Вам необходимо заменить OR (||) на AND (& &).

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;}