Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Координаты точек 
:(
    Опции темы
Гениальный123Робот
Дата 8.11.2006, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Уважаемые господа, кто хорошо в математике разбирается, составьте 4 таких вот функции:

1) Получения декартовых координат точки, если заданы её полярные координаты.
2) Получения полярных координат точки, если заданы её декартовые координаты.
3) Вычисления расстояния между двумя точками, заданными в декартовой системе координат. 
4) Вычисления расстояния между двумя точками, заданными в полярной системе координат. 

Ну или хотя бы кто что сможет. 
PM MAIL   Вверх
cardinal
Дата 8.11.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Вопрос: речь идет о 2D?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Гениальный123Робот
Дата 8.11.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(cardinal @ 8.11.2006,  00:54)
Вопрос: речь идет о 2D?

Ты знаешь, в условии не оговорено... Ни слова об этом не сказано... Даже не знаю...
Но рассмотрим двухмерное, навреное. Хватит пока. 

Это сообщение отредактировал(а) Гениальный123Робот - 8.11.2006, 01:01
PM MAIL   Вверх
cardinal
Дата 8.11.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



Ресь идет о 2D. Извиняюсь за глупый вопрос...

1.
2.
см. тут
http://www.relativity.ru/issues/coords.shtml
и тут (лучше тут - картинки красивее smile )
http://algolist.manual.ru/maths/geom/coord.php

Цитата(Гениальный123Робот @  7.11.2006,  23:42 Найти цитируемый пост)
3) Вычисления расстояния между двумя точками, заданными в декартовой системе координат. 
4) Вычисления расстояния между двумя точками, заданными в полярной системе координат. 

см. длина вектора (который объединяет эти точки)


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Гениальный123Робот
Дата 8.11.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



cardinal, как я понял, 

для 1) и 2) мне достаточно вот этого:

Формулы для перехода от полярных координат к декартовым 
x=ρ*cos(φ), 
y=ρ*sin(φ)

и обратно: 
ρ=sqrt(x2)+y2), 
φ=arctg(y/x)=arcsin(y/ρ)


для 4) выразить _р (РО) через все заданное..

для 3) я чуток не понял. или прямоугольные координаты - это и есть декартовы координаты? Если да, то как там выразить этот вектор..? 
PM MAIL   Вверх
zhenium
Дата 8.11.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.10.2006

Репутация: 2
Всего: 2



Ну в декартовых координатах совсем просто! Они же и прямоугольные.
Сейчас объясню... Правда, не знаю, как тут рисунок прикреплять, поэтому придётся на пальцах объяснять.

Пусть есть 2 точно A(x_1; y_1) и B(x_2; y_2). В них x_2 > x_1 и y_2 > y_1, но это, как ты далее убедишься, не принципиально.
Тогда длина вектора, она же расстояние между двумя точками, будет выглядеть так:

s^2 = ( x_2 - x_1 )^2 + ( y_2 - y_1 )^2, где ^2 - возведение в квадрат, т.е. вся формула есть не что иное как теорема Пифагора. Просто затем находишь квадратный корень из s 

s = sqrt( ( x_2 - x_1 )^2 + ( y_2 - y_1 )^2 ), где sqrt() - кв.корень.

Тут не принципиально, вычитают ли x_2 из x_1 или наоборот ( также и для y ), т.к. всё равно возводим в квадрат, минус если в разности и появится, сам понимаешь, затем исчезнет!

P.S. Постараюсь найти у себя и ответ на пункт 4. И ещё. В пунктах 1 и 2 ты был совершенно прав! Плюс ещё φ = arccos(x/ρ). Но это и так понятно.


PM MAIL   Вверх
cardinal
Дата 9.11.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 15
Всего: 99



По поводу задачи номер 4)

x2=ρ2*cos(φ2), 
y2=ρ2*sin(φ2),
x1=ρ1*cos(φ1), 
y1=ρ1*sin(φ1)

подставляем в формулу
s = sqrt( ( x2 - x1 )^2 + ( y2 - y1 )^2 ) 
, написанную zhenium

и получаем, что хотели...

Можно и по-другому, но писать лень... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
zhenium
Дата 9.11.2006, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.10.2006

Репутация: 2
Всего: 2



Абсолютно согласен с Сardinal'ом!
С твоего позволения, Cardinal, я закончуsmile

s = sqrt( ( ρ2*cos(φ2) - ρ1*cos(φ1) )^2 + ( ρ2*sin(φ2) - ρ1*sin(φ1) )^2 ) 

Если есть ещё вопросы - поделились...
PM MAIL   Вверх
Гениальный123Робот
Дата 9.11.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Мужики, спасибо! Пока буду разбираться... если что, подниму тему снова, скинув наисанный мною код..
PM MAIL   Вверх
maxim1000
Дата 9.11.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



или по формуле косинусов:
d(a,b)^2=r(a)^2 + r(b)^2 - 2*r(a)*r(b)*cos(angle(a)-angle(b))


--------------------
qqq
PM WWW   Вверх
Гениальный123Робот
Дата 14.11.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Приветствую! Поглядите задачу, бо есть ошибки! Решена она оч-оч просто, бо не люблю мудрить! Кому не лень, скопируйте полностью и протестируйте. Там такая вот ошибка выдается при вычислении корня sqrt: Domain Error  и результат выдает = +NAN 
Что тут не так?
 

Код

#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>

void Menu(void);
void fun1(void);
void fun2(void);
void fun3(void);
void fun4(void);

 main()
{

 int choice;
 int quitting = 0;

  Menu();

  while (!quitting) {

choice=toupper(getch());

switch (choice) {

 case 'A' :
 fun1();
 Menu();
 break;

 case 'B' :
 fun2();
 Menu();
 break;

 case 'C' :
 fun3();
 Menu();
 break;

 case 'D' :
 fun4();
 Menu();
 break;

 case 'E':
 quitting=1;
 break;

  default:
  printf("\nSelection Error! Enter valid A, B, C or D value!\n");
  break;
   }

 }
  return 0;
}

 void Menu(void)
 {
  printf("\nEnter A - to enter polar coordinates and find decart coordinates\n");
  printf("Enter B - to enter decart coordinates and find polar coordinates\n");
  printf("Enter C - to find the distance between two dots in polar system of coordinates \n");
  printf("Enter D - to find the distance between two dots in decart system of coordinates\n");
  printf("Enter E - to quit\n");
 }


  void fun1(void)
 {
 
  double p, f;
  double x, y;

  printf("\nEnter vector-radious P: p= ");
   scanf("%lf", &p);
  printf("\nEnter angle f: f= ");
   scanf("%lf", &f);

  x=p*cos(f);
  y=p*sin(f);

  printf("\n x= %lf", x);
  printf("\n y= %lf\n", y);
 }

  void fun2(void)
 {
  
  double p, f;
  double x, y;

  printf("\nEnter Coordinate X: x= ");
   scanf("%lf", &x);
  printf("\nEnter Coordinate Y: y= ");
   scanf("%lf", &y);

  p=sqrt(x*x+y*y);
  f=atan(y/x);

  printf("\n p= %lf", p);
  printf("\n f= %lf\n", f);
 }



  void fun3(void)
 {
  
  int x1, y1;
  int x2, y2;
  double d;

  printf("\nEnter Coordinate X1: x1= ");
   scanf("%d", &x1);
  printf("\nEnter Coordinate Y1: y1= ");
   scanf("%d", &y1);
  printf("\nEnter Coordinate X2: x2= ");
   scanf("%d", &x2);
  printf("\nEnter Coordinate Y2: y2= ");
   scanf("%d", &y2);

  d=sqrt((x2-x1)*2+(y2-y1)*2);
      printf("\nThe distance is = %lf\n", d);

 }


  void fun4(void)
 {

  int P1, P2;
  int f1, f2;
  double d;

  printf("\nEnter Coordinate P1: P1= ");
   scanf("%d", &P1);
  printf("\nEnter Coordinate f1: f1= ");
   scanf("%d", &f1);
  printf("\nEnter Coordinate P2: P2= ");
   scanf("%d", &P2);
  printf("\nEnter Coordinate f2: f2= ");
   scanf("%d", &f2);

  d=sqrt((P2*cos(f2)-P1*cos(f1))*2 + (P2*sin(f2)-P1*sin(f1))*2);
    printf("\nThe distance is %lf", d);
  }

PM MAIL   Вверх
kali
Дата 14.11.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 9.11.2006
Где: Минск

Репутация: 18
Всего: 20



Гениальный123Робот,]
Цитата

  d=sqrt((x2-x1)*2+(y2-y1)*2);

 тебе нужно не умножать на 2 а возводить во 2 степень
т.е.
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

смотри свои fun3  и fun4


Это сообщение отредактировал(а) kali - 14.11.2006, 18:44
--------------------
Работая над решением задачи, всегда полезно знать ответ.
PM MAIL Skype   Вверх
Гениальный123Робот
Дата 14.11.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(kali @ 14.11.2006,  18:43)
Гениальный123Робот,]
Цитата

  d=sqrt((x2-x1)*2+(y2-y1)*2);

 тебе нужно не умножать на 2 а возводить во 2 степень
т.е.
d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

смотри свои fun3  и fun4

Ух, да! Устал под конец... Исправил в программе, спасибо. 

Еще будут рекомендации и пожелания?  ;)
PM MAIL   Вверх
smalcom
Дата 14.11.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: нет
Всего: 7



прими 50 грам за повышение бала


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Гениальный123Робот
Дата 15.11.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(smalcom @ 14.11.2006,  19:30)
прими 50 грам за повышение бала

Наливай  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1213 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.