Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2021, 03:02   #11
Stanislav09
Пользователь
 
Регистрация: 03.10.2021
Сообщений: 17
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Stanislav09, и разберитесь со сферическими координатами.
На примере географических ( они правда не совсем сферические, но приблизительно можно считать так).
Например на полюсе долгота не определена , определена только широта фи=90 и расстояние до центра. Потому что там x=0 и y=0.
Ну и в центре Земли ни широта ни долгота не определены, только расстояние =0.
Вот с фи я разобрался...
Код:
#include<stdio.h>        // Программа по нахождению координат (x,y,z) в сферической системе координат //
#include<math.h>
#include<locale.h>

void main()
{
    setlocale(LC_ALL, "Rus");
    float x,y,z,p,fi,alpha;
    printf("Введите координату x:");    // Ввод координаты x //
    scanf("%f", &x);
    printf("Введите координату y:");    // Ввод координаты y //
    scanf("%f", &y);
    printf("Введите координату z:");    // Ввод координаты z //
    scanf("%f", &z);
    if (x > 0, y > 0, z > 0)
    {
        p = sqrt( pow(x,2) + pow(y,2) + pow(z,2) );      // Нахождение координаты p //
        fi = atan ( x / y );            // Нахождение координаты fi //
        alpha = acos( z / p );                          // Нахождение координаты alpha //
        printf("Координаты x,y,z в сферической системе координат p,fi,alpha равны: %f, %f, %f", p, fi, alpha);  // Вывод координат p,fi,alpha //
    }
    else
    {
        printf("Ошибка!!!");  // Вывод ошибки //
    }
}
Stanislav09 вне форума Ответить с цитированием
Старый 04.10.2021, 03:06   #12
Stanislav09
Пользователь
 
Регистрация: 03.10.2021
Сообщений: 17
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Код:
if (x > 0, y > 0, z > 0)
а почему только в одном из 8 квадрантов ? По моему в пространстве x,y,z могут быть любые

А вот перед этим -
Код:
fi = x / sqrt( pow(x,2) + pow(y,2) );
alpha = acos( z / p );
как раз можно проверку знаменателя на 0. Вот тогда как раз сферические координаты и не определить.

Кстати, зачем эти pow(x,2), не проще x*x.

Да, и фи у вас неправильно. Арктангенс забыли. Или что-то напутали..
А вот это я не понял, что именно нужно сделать?
Stanislav09 вне форума Ответить с цитированием
Старый 04.10.2021, 11:56   #13
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,566
По умолчанию

Это звучит так:
Код:
if ( (x != 0) || ( y != 0) || ( z != 0) )
(достаточно, чтобы хоть одна координата была ненулевой, тогда неопределённости не будет)
Действительно, точка может быть в одном из 8 квадрантов октантов, так что x,y,z не обязательно положительные.
Цитата:
А вот это я не понял, что именно нужно сделать?
Дык это - к вышеприведённой строке - если все x,y,z = 0, то мы в центре сферы, и определение сфер. координат лишено смысла.
digitalis вне форума Ответить с цитированием
Старый 04.10.2021, 23:36   #14
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Посмотрел ради интереса, как на сайте IAU SOFA сделано.
Вот -
Код:
void iauC2s(double p[3], double *theta, double *phi)
{
   double x, y, z, d2;
   x  = p[0];
   y  = p[1];
   z  = p[2];
   d2 = x*x + y*y;
   *theta = (d2 == 0.0) ? 0.0 : atan2(y, x);
   *phi = (z == 0.0) ? 0.0 : atan2(z, sqrt(d2));
   return;
}
У них там в векторах. Вам нужно оттуда всего 3 строчки
Код:
  d2 = x*x + y*y;
  theta = (d2 == 0.0) ? 0.0 : atan2(y, x);
  phi = (z == 0.0) ? 0.0 : atan2(z, sqrt(d2));
Плюс расстояние найти sqrt(d2+z*z)

Последний раз редактировалось type_Oleg; 04.10.2021 в 23:40.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны координаты точки в прямоугольной системе координат. Составьте алгоритм и программу, определяющую принадлежит ли точка макс789 Помощь студентам 21 02.06.2016 07:03
Точки в системе координат. Sheva95 Помощь студентам 0 10.04.2013 17:28
В начерченной ранее системе координат изобразите на чертеже точки: Mariy_19 Паскаль, Turbo Pascal, PascalABC.NET 0 18.12.2011 18:50
Определить какая из точек находится ближе к началу координат(алгоритм ветвления). Rakfeller Паскаль, Turbo Pascal, PascalABC.NET 16 25.01.2009 02:01