Поиск:

Ответ в темуСоздание новой темы Создание опроса
> полярные координаты 
V
    Опции темы
Kasiro
Дата 21.5.2012, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет!

Нужно на канве нарисовать 60 лучей которые расходятся по кругу на 360*
Использую для этого полярные координаты. В цикле угол увеличиваю с каждым шагом на 6
и сохраняю полученные точки в массив

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

Код
int RadToX(int r, int fi){ //r - радиус, fi - угол (в качестве r передаю 200)
return r*cos(fi);
}

int RadToY(int r, int fi){
return r*sin(fi);
}

//заполнение массива

std::vector<cPoint> Rays;

int R=200;
int FI=0;

for (int i = 0; i < 60; i++) {
Rays.push_back(cPoint(RadToX(R, FI), RadToY(R, FI)));
FI+=6;
}




затем в цикле рисую:

Код
while (i!=Rays.size()){

Image->Bitmap->Canvas->MoveTo(center.x, center.y);
Image->Bitmap->Canvas->LineTo(Rays[i].x+center.x, Rays[i].y-center.y);

i++;
}


Rays - вектор точек, center - центральная точка из которой исходят лучи

в итоге получается вот такая вот фиговина:

 user posted image

Подскажите где косяк?)
PM MAIL   Вверх
ipc
Дата 21.5.2012, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

Image->Bitmap->Canvas->LineTo(Rays[i].x+center.x, Rays[i].y+center.y);

нет?
PM MAIL   Вверх
Kasiro
Дата 21.5.2012, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ipc, ну я и слоупок)) действительно)) спасибо))

только всеравно почему то лучи расходятся не с равными промежутками, а пучками по три штуки
PM MAIL   Вверх
ipc
Дата 21.5.2012, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На всякий случай: у тебя не полярные координаты, а параметрическое уравнение. 

Если уменьшить кол-во элементов вектора, то видно, что угол слишком большой для градуса. 
Help сказал, что в качестве параметров sin и cos принимают радианы.
Google сказал, что 1 радиан = 180 / Пи  градусов
вот и все:
Код

const double dRadian = 180 / 3.14159265;

//---------------------------------------------------------------------------
int RadToX(int r, int fi){ //r - радиус, fi - угол (в качестве r передаю 200)
return r*cos(fi / dRadian);
}
int RadToY(int r, int fi){
return r*sin(fi / dRadian);
}

PM MAIL   Вверх
Kasiro
Дата 21.5.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ipc, Урааа)))) Работает))
Огромное спасибо!)))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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