2015-01-23 3 views
0

У меня проблема с домашней задачей, которая запрашивает у пользователя вершины прямоугольной призмы, расположенной в трехмерном пространстве. Мне нужно рассчитать площадь поверхности и объем призмы. Я должен иметь функцию, которая вычисляет расстояние между двумя точками на призме, я могу спросить получить информацию от пользователя, что координаты являютсяРасстояние между двумя координатами в 3D-пространстве призмы

double cx1, cy1, cz1, cx2, cy2, cz2, cx3, cy3, cz3, cx4, cy4, cz4, cx5, cy5, cz5, cx6, cy6, cz6, cx7, cy7, cz7, cx8, cy8, cz8; 

int main() { 
    printf("Enter the first coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx1, &cy1, &cz1); 
    printf("Enter the second coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx2, &cy2, &cz2); 
    printf("Enter the third coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx3, &cy3, &cz3); 
    printf("Enter the fourth coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx4, &cy4, &cz4); 
    printf("Enter the fifth coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx5, & cy5, &cz5); 
    printf("Enter the sixth coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx6, &cy6, &cz6); 
    printf("Enter the seventh coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf", &cx7, &cy7, &cz7); 
    printf("Enter the eighth coordinate in the form x y z: \n"); 
    scanf("%lf %lf %lf",&cx8, &cy8, &cz8); 


return get_dist(cx1, cx2, cy1, cy2); 

}

я присваивается каждому х и г координаты переменного это все в основной функции ... то я сделал это для одной точки:

double get_dist(cx1,cx2,cy1, cy2){ 
    double distance1_2; 
    distance1_2 = sqrt(((cx2 - cx1)*(cx2 - cx1)) - ((cy2 - cy1)*(cy2 - cy1))); 

    printf("%lf",distance1_2); 

return 0; 
} 

и он дал мне правильное значение 2, но есть более простой/быстрый способ сделать это чем необходимость выполнять каждую координату отдельно?

+0

Ваш расчет расстояния неправильный, между прочим. – haccks

+0

Координаты группы 3 в структуре «Point3» (или smthg). Сделайте массив из 8 пунктов. – bolov

ответ

2

Это то, что вы могли бы, чтобы уменьшить вашу головную боль со многими переменными:

  • Создать структуру для группы все 3 координаты точки
  • создания и массива для точек

Как это:

struct Point3 { 
    double x, y, z; 
}; // <-- the semocolon (;) is mandatory here 

// hack so that you can use `Point3` instead of `struct Point3` when 
// referring to the structure type. This is completely unnecessary in C++ 
typedef struct Point3 Point3; 

int const g_num_points = 8; // this is actually an instance where 
          // a global variable is arguably not that bad 

int main() { 
    Point3 points[g_num_points]; // avoid global variables like plague 
    int i; 
    int ret; 

    for (i = 0; i < g_num_points; ++i) { 
    printf("Enter the %d'th coordinate in the form x y z: \n", i); 
    ret = scanf("%lf %lf %lf", &(points[i].x), &(points[i].y), &(points[i].z)); 
    if (ret != 3) { 
     // deal with invalid input. Since this is homework 
     // I will leave it as an exercise for you 
    } 
    } 
} 

Поскольку это домашнее задание, я оставлю тебя до фига Указать, как написать функцию get_distance, используя структуру Point3.

И btw, расстояние между двумя точками в 3d координатах включает в себя ... ну ... две точки и каждая точка имеет 3 координаты, у вас есть 6 координат. В качестве входных параметров ваша функция принимает только 4 координаты. Используя такую ​​структуру, чтобы представить точку по 3 координатам, нужно сделать более понятным, как это исправить.

+0

как вам все это звучит? – bolov

+0

Я использую c не C++, приведенный выше код я сократил его, чтобы проверить, попробуйте код, пока я продолжал работать над ним. Я понял, что мне нужно включить z, поэтому я добавил его как x и y выше, поэтому вместо этого заменили их чем-то вроде этого distance1_2 = sqrt (((cx2 - cx1) * (cx2 - cx1)) - ((cy2 - cy1) * (cy2 - cy1) - (cz2 - cz1) * (cz2 - cz1))) ; хотя я догадываюсь, что мой первоначальный вопрос правильно сформулировал, я хотел знать, был ли более быстрый способ получить расстояние, не делая каждый отдельно, хотя по-отдельности все же дает мне правильный ответ, а также – Alaska

+0

i havent научился использовать массивы еще – Alaska

Смежные вопросы