Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > тип complex


Автор: errtu 20.12.2005, 20:49
Привет.
Не подскажете как мне создать двумерный массив комплексных чисел типа Complex?

Автор: cardinal 20.12.2005, 21:05
http://forum.vingrad.ru/index.php?showtopic=74234&view=findpost&p=588275

Автор: errtu 20.12.2005, 21:16
Цитата(cardinal @ 20.12.2005, 21:05)
http://forum.vingrad.ru/index.php?showtopic=74234&view=findpost&p=588275

понимаете в коде используется объявление типа complex **c .тока чёт не фурычит.
Я имею в виду встроенный тип в С++,а не самодельный...

Автор: cardinal 20.12.2005, 22:47
В С++ нет встроенного типа complex! То, что описывается в <complex> это вообще-то класс, а не двумерный массив!

Автор: blackofe 21.12.2005, 00:00
вопрос, что называть "встроенным".

в stl входит <complex>. содержит шаблоны и определения для работы с комплексными числами. пользуйтесь на здровье! smile

Автор: cardinal 21.12.2005, 02:14
Он то имеет в виду что-то наподобии: int, double, char... То есть .h прописывать не надо и тип данных реализуется компилятором. complex не реализован в стандартных С/C++ компиляторах, а другие (если в них реализован), я бы не использовал, т.к. это лишний гемморой. Лучше ИМХО сделать complex самому если речь идет о С (или взять готовый класс из того же STL если речь идет о С++) и закрыть на этом вопрос.

Автор: Errtu 22.12.2005, 21:46
А каким макаром перевести на С++ вот это : Powerof2(nx,&m,&twopm) ?
Вообще-то эта строчка есть в преобразовании Фурье (по ссылке с этого сайта) Смысл?
Причём m и twomp не определены (просто созданы) , значит рандомные какие-то.Вообще, вроде как проверяется на равенство степени двойки,а всё-таки может кто встречал?

Автор: cardinal 22.12.2005, 22:59
Цитата(Errtu @ 22.12.2005, 19:46)
А каким макаром перевести на С++ вот это : Powerof2(nx,&m,&twopm) ?

А что это? Если это на Си написано, то переводить не надо... Так что в чем вопрос?
Цитата(Errtu @ 22.12.2005, 19:46)
Вообще-то эта строчка есть в преобразовании Фурье (по ссылке с этого сайта) Смысл?

Где ссылка?
Цитата(Errtu @ 22.12.2005, 19:46)
Причём m и twomp не определены (просто созданы) , значит рандомные какие-то.

Предполагаю, что в них будет результат.
Цитата(Errtu @ 22.12.2005, 19:46)
Вообще, вроде как проверяется на равенство степени двойки,а всё-таки может кто встречал?

smile Этот вопрос имеет что-то общее с комплексными числами? Если нет, то создай отдельную тему...

Автор: errtu 23.12.2005, 09:49
ссылка http://astronomy.swin.edu.au/~pbourke/other/fft2d/

Фишка в том, что здесь рассматривается двумерное преобразование Фурье.Но код кривоватый
Как бы его отредактировать?Чтоб работало все как задумано? Можете посмотреть?


[b][/b]

Автор: cardinal 23.12.2005, 14:08
Код может и кривой, но я думаю, что он РАБОЧИЙ! То есть тебе просто надо переделать то, что написано в Си (в первую очередь заменить класс complex на структуру complex) и сделать то, чего не хватает. А Powerof2 это просто функция, которая проверяет является ли ny (если не ошибаюсь) 2^х = ny. Если ты скажешь ny = 32 например, то можешь эти строки вообще закомментировать.

Автор: Errtu 24.12.2005, 00:27
Блин.Я не пойму как это работает??Чё за параметр m?
Как интересно там делается обратное преобразоавание?Я не нашел обработки dir==-1, которое отвечает за обратное.у меня к тому же коэфф по сравнению с математикой получаются в раза меньше -(

Автор: errtu 24.12.2005, 15:05
Или как вам вот это:

/* Do the bit reversal */
i2 = nn >> 1;
j = 0;
for (i=0;i<nn-1;i++) {
if (i < j) {
tx = x[i];
ty = y[i];
x[i] = x[j];
y[i] = y[j];
x[j] = tx;
y[j] = ty;
}
k = i2;
while (k <= j) {
j -= k;
k >>= 1;
}
j += k;

Интересгно в каком случае тело цикла будет выполняться?
Каким образом у нас i<j станет?
...Удивляюсь

Автор: cardinal 24.12.2005, 15:42
Цитата(Errtu @ 23.12.2005, 22:27)
Я не нашел обработки dir==-1

Например:
Код

if (dir == 1)
   c2 = -c2;

Цитата(errtu @ 24.12.2005, 13:05)
Каким образом у нас i<j станет?

Например:
Код

j += k;

Цитата(Errtu @ 23.12.2005, 22:27)
Я не пойму как это работает?

Пора бы почитать про Фурье трансформацию от начала до конца... А во-вторых не бери в голову как работает FFT, а разберись с DFT и возьми FFT как есть! FFT в несколько раз быстрее DFT и больше ничего. Т.е. бери и пользуйся и не ломай голову над алгоритмом, над которым поломали голову до тебя, если тебе это не нужно, а просто нужен результат.

Автор: Errtu 24.12.2005, 16:13
Цитата(cardinal @ 24.12.2005, 15:42)
Цитата(Errtu @ 23.12.2005, 22:27)
Я не нашел обработки dir==-1

Например:
Код

if (dir == 1)
   c2 = -c2;

Цитата(errtu @ 24.12.2005, 13:05)
Каким образом у нас i<j станет?

Например:
Код

j += k;

Цитата(Errtu @ 23.12.2005, 22:27)
Я не пойму как это работает?

Пора бы почитать про Фурье трансформацию от начала до конца... А во-вторых не бери в голову как работает FFT, а разберись с DFT и возьми FFT как есть! FFT в несколько раз быстрее DFT и больше ничего. Т.е. бери и пользуйся и не ломай голову над алгоритмом, над которым поломали голову до тебя, если тебе это не нужно, а просто нужен результат.

Ага.Я читал.
Дело в том, что есть много разных исходников и гни асеп дают разный результат.
[/b]
Чтобы ориентироваться я проверял с результатом в пакете Mathematica.
Там проводится дпф, почему они отличаются, если исходник верен ?
Вот и незнаю.
Могу ли для своих картинок использовать обычное пф или нужно обязательно двумерное.?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)