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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Амплитуда, диапозон чисел, Хочу воспользоваться синусом 
:(
    Опции темы
SABROG
Дата 6.3.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Хочу получать в цикле значения например от 0 до 100 и чтобы функция синуса возвращала в таком порядке:
0
1
2
...
98
99
100
99
98
...
0
1
2
...
100

Или диапозон -10 ... +10
-10
-9
-8
...
0
1
2
...
10
9
8
...
1
0
-1
...
-10

А также хочу иметь возможность указать границы типа 65-95


Например чтобы получить диапозон 0-255 подобрал эмпирически значения 127,128. Но часто получаю например десять нулейт, потом десять единиц, три двойки и т.п. Видимо результат округления. Хочу четкий шаг в 1.

Код

int a=0;
for (int i=0; i < 1000; i++)
{
a = (Sin(3.141592653589*i/100)*127)+128;
}




Это сообщение отредактировал(а) SABROG - 6.3.2007, 14:06


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
aldari
Дата 6.3.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хочешь четкий шаг в единицу -- никогда не используй числа с плавающей точкой.


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


Эксперт
****


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

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



Четкий шаг в единицу? 
Это чтобы каждый следующий результат (a) отличался от предыдущего ровно на единицу?
С помощью синуса?
Наверное, я чего-то не понимаю...  Зачем тебе синус-то?


--------------------
...
PM   Вверх
SABROG
Дата 6.3.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Цитата(Earnest @ 6.3.2007,  21:03)
Четкий шаг в единицу? 
Это чтобы каждый следующий результат (a) отличался от предыдущего ровно на единицу?
С помощью синуса?
Наверное, я чего-то не понимаю...  Зачем тебе синус-то?

Сам не знаю. Думал это хороший способ генерирования циклических последовательностей кроме этого:

Код

int a=10, b=20;
while(1)
{
for (int i=a; i < b; i++)
{
по нарастающей...
}
for (int i=b; i >= a; i--)
{
по убывающей
}
}



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Earnest
Дата 7.3.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А чем тебя простые циклы не устраивают? Нужно в виде функции написать что ли?


--------------------
...
PM   Вверх
SABROG
Дата 7.3.2007, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Я написал для проверки этот код:

Код

int Start1=GetTickCount(),End1,Start2,End2;
int k=0;
for (int i=0; i < 1000000; i++)
{
k = (Sin(3.141592653589*i/100)*127)+128;
}
End1 = GetTickCount();
Label1->Caption = IntToStr(End1-Start1);
Start2=GetTickCount();
int a=0, b=255;
for(int j=0; j < 1000000; j++)
{
for (int i=a; i < b; i++)
{
k = i;
}
for (int i=b; i >= a; i--)
{
k = i;
}
}
End2 = GetTickCount();
Label2->Caption = IntToStr(End2-Start2);


Как результат получаю в двух Labelaх значения: 94 и 1234
Т.е. первый код работает в 13 раз быстрее.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Earnest
Дата 9.3.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Самому-то ничего странным не показалось? Синус, видишь ли, у него работает быстрее чем ничего. 
У тебя второй код содержит вложенные циклы, соответственно общее число итераций умножается на 256*2. Ты бы хоть подумал сколько периодов каждый код тебе генерирует.


--------------------
...
PM   Вверх
SABROG
Дата 9.3.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



С математикой у меня всегда были проблемы, потому и спрашиваю про синусы smile
Ну раз не судьба, значит не судьба. Будем использовать старые добрые циклы, спасибо за участие.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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