Bolic Жалоба Опубликовано 11 января, 2005 Есть радиус окружности, координаты центра окружности, и координаты 2_ух точек, лежащих на окружности Вопрос: как найти путь из одной точки в другую?(или по другому "длину дуги", соединяющие эти две точки Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Blood Sin Жалоба Опубликовано 11 января, 2005 Какая знакомая задача Если вспомню - напишу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Smile Жалоба Опубликовано 11 января, 2005 ееее я не помню формул и ручки под рукой нет вывести=))) ну, блин, посчитай угол треугольника с вершиной, которая в радиусе, опирающийся на точки (координаты же есть=))), сектор короче =)) ну, а дальше угол/360 и умножить на длину окружности епть, все формулы забыл, нахрен а че в учебниках уже такое не пишут? =)))) гыыы, я знающий программер =)) лол =))) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Grimm Жалоба Опубликовано 11 января, 2005 Bolic открой учебник по геометрии за 9 или 10 класс Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolic Жалоба Опубликовано 12 января, 2005 Grimm> Открывал. Нету. И по алгебре тоже открывал. Нету. Может привидешь формулу из своего учебника? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Grigory Жалоба Опубликовано 12 января, 2005 Ну, блин, несколько треугольников + несколько формул по геометрии 9-11 классов, включая, возможно, теорему Пифагора. Задача десткая. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolic Жалоба Опубликовано 12 января, 2005 Ну если она детская , кто-нибудь, привидите формулу!!! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Greench Жалоба Опубликовано 12 января, 2005 Bolic , на посмотри, может разберешься писал 10 лет назад - диплом защищал . Только смотри, это на MSX-C для Ymaha (были такие компьютеры в то время) Вычерчивание дуг (локальный графический объект arc () ) void circle(xc,yc,rad,fa,sa,stat) int xc,yc; /X координаты центра X/ int rad; /X величина радиуса X/ int fa,sa; /X начальный и конечный углы X/ bool stat; /X статус вывода дуги: = =true - дуга выводится, в противном случае - стирает-ся или не выводится совсем X/ Вычерчивание дуг вызывает наибольшие трудности, т.к. возможно исполь-зовать только целочисленную арифметику, что препятствует использованию функций sin() и cos() для вычисления координат точек попадающих в данную дугу. Эта проблема устраняется использованием готовой таблицы значений си-нуса, вычисленой для углов от 0* до 90° и умноженных на 256. Это позво-ляет сократить вычисления и упростить работу функций. Для нахождения синуса других углов, а также косинуса применяются формулы приведения. Таблица значений задана в масиве sindat (см. приложение В.). Характерной особенностью работы зтого графического Объекта является то, что начальный и конечный углы дуги задаются в градусах, что более удоб-но для пользователя. Для упрощения работы, углы ставятся в соответствие целым числам при помощи вспомогательной функции apseudoangleO. Эта функция вызывает, в свою очередь другую - pseudoangleO, вы¬числяющую длину части окружности, в ко-торую попадает вычерчиваемая дута. В функции arccalcO последовательно вы-числяются координаты начальной и конечной точек дуги. Затем вызывается вспомогательна фунция arcrclO, аналогичная функции _p_circle(). В ней, при помощи логической функции InArcO устанавливается, попадает ли точка с данными координатами в необходимую дугу окружности, и если это так, то точка рисуется. /X Рисование дуг X/ void arc(x0,y0,r,fa,sa,col) int x0,y0,r,fa,sa; bool col; register int x,y,del; y=360-fa; fa=360-sa; sa=y; CurR=r; FirstA=apseudoangle(fa); SecondA=apseudoangle(sa); CurX=x0; CurY=y0; y=r; del=3-2Xr; for (x=0; x<y;) { arcrcl(x,y,col); if (del<0) del+=4Xx+6; else { del+=4X(x-y)+10; У—; } x++; } x=y; if (y) arcrcl(x,y,col); } static void arcrcl(x,y,col) int x,y; bool col; { int xl,yl; for (xl=x; xl<x+l; ++xl) { arcpst(xl,y,col); arcpst(xl,-y,col); arcpst(-xl,y,col); arcpst(-xl,-y,col); } for (yl=y; yl<y+l; ++yl) { arcpst(yl,x,col); arcpst(yl,-x,col); arcpst(-yl,x,col); arcpst(-yl^-x,col); } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolic Жалоба Опубликовано 12 января, 2005 Greench Вот за это благодарен! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
ANGEL Жалоба Опубликовано 12 января, 2005 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Grimm Жалоба Опубликовано 12 января, 2005 Bolic Может я ошибся, но все таки. Есть три точки с известными координатами (центр окружности, две точки на окружности) 1. Найти стороны треугольника с вершинами в этих точках (длина отрезка по координатам его концов). 2. Найти угол, с вершиной в центре окружности (три стороны известны, находим по теореме косинусов). 3. Градусная мера искомой дуги равна градусной мере угла, или 360 минус градусная мера угла, это, смотря, какая дуга нужна, меньшая или большая. 4. Длина окружности соответствует 360 градусам, длина искомой дуги соответствует N градусам из пункта 3. Соотношение найти не сложно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...
Bolic Жалоба Опубликовано 13 января, 2005 Grimm> Благодарю Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты More sharing options...