| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C] Координаты точек |
| Автор: Гениальный123Робот 8.11.2006, 00:42 |
| Уважаемые господа, кто хорошо в математике разбирается, составьте 4 таких вот функции: 1) Получения декартовых координат точки, если заданы её полярные координаты. 2) Получения полярных координат точки, если заданы её декартовые координаты. 3) Вычисления расстояния между двумя точками, заданными в декартовой системе координат. 4) Вычисления расстояния между двумя точками, заданными в полярной системе координат. Ну или хотя бы кто что сможет. |
| Автор: cardinal 8.11.2006, 00:54 |
| Вопрос: речь идет о 2D? |
| Автор: Гениальный123Робот 8.11.2006, 00:59 | ||
Ты знаешь, в условии не оговорено... Ни слова об этом не сказано... Даже не знаю... Но рассмотрим двухмерное, навреное. Хватит пока. |
| Автор: Гениальный123Робот 8.11.2006, 15:17 |
| cardinal, как я понял, для 1) и 2) мне достаточно вот этого: Формулы для перехода от полярных координат к декартовым x=ρ*cos(φ), y=ρ*sin(φ) и обратно: ρ=sqrt(x2)+y2), φ=arctg(y/x)=arcsin(y/ρ) для 4) выразить _р (РО) через все заданное.. для 3) я чуток не понял. или прямоугольные координаты - это и есть декартовы координаты? Если да, то как там выразить этот вектор..? |
| Автор: zhenium 8.11.2006, 16:21 |
| Ну в декартовых координатах совсем просто! Они же и прямоугольные. Сейчас объясню... Правда, не знаю, как тут рисунок прикреплять, поэтому придётся на пальцах объяснять. Пусть есть 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/ρ). Но это и так понятно. |
| Автор: cardinal 9.11.2006, 00:54 |
| По поводу задачи номер 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 и получаем, что хотели... Можно и по-другому, но писать лень... |
| Автор: zhenium 9.11.2006, 02:48 |
| Абсолютно согласен с Сardinal'ом! С твоего позволения, Cardinal, я закончу s = sqrt( ( ρ2*cos(φ2) - ρ1*cos(φ1) )^2 + ( ρ2*sin(φ2) - ρ1*sin(φ1) )^2 ) Если есть ещё вопросы - поделились... |
| Автор: Гениальный123Робот 9.11.2006, 13:16 |
| Мужики, спасибо! Пока буду разбираться... если что, подниму тему снова, скинув наисанный мною код.. |
| Автор: maxim1000 9.11.2006, 13:37 |
| или по формуле косинусов: d(a,b)^2=r(a)^2 + r(b)^2 - 2*r(a)*r(b)*cos(angle(a)-angle(b)) |
| Автор: Гениальный123Робот 14.11.2006, 18:36 | ||
| Приветствую! Поглядите задачу, бо есть ошибки! Решена она оч-оч просто, бо не люблю мудрить! Кому не лень, скопируйте полностью и протестируйте. Там такая вот ошибка выдается при вычислении корня sqrt: Domain Error и результат выдает = +NAN Что тут не так?
|
| Автор: kali 14.11.2006, 18:43 | ||
Гениальный123Робот,]
тебе нужно не умножать на 2 а возводить во 2 степень т.е. d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); смотри свои fun3 и fun4 |
| Автор: Гениальный123Робот 14.11.2006, 18:58 | ||||
Ух, да! Устал под конец... Исправил в программе, спасибо. Еще будут рекомендации и пожелания? ;) |
| Автор: smalcom 14.11.2006, 19:30 |
| прими 50 грам за повышение бала |
| Автор: Гениальный123Робот 15.11.2006, 00:31 | ||
Наливай |