Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2015, 10:46   #1
Дж.Лондон
Новичок
Джуниор
 
Регистрация: 25.08.2015
Сообщений: 2
По умолчанию фрактал в консольном приложении с++

В общем, нужно написать фрактал, используя графику в консольном приложении с++. Код обычной программы фрактала.

Код:
#include <graphics.h>
#include <math.h>
#include <complex.h>
#include <conio.h>
 
int main() {
  double a=0.85, b=0.9, k=0.5, p=7.7; //константы. При изменении их будет модифицироваться изображение
  complex z;
  int gd=DETECT, gm;
  int i;
  initgraph(&gd, &gm, "G:\\programs\\BC31\\BGI"); // инициализируем графику
  z=0;
  for (i=0; i<=30000; i++) {
    z=a+b*z*exp(complex(0,(k-p/(1+abs(z*z))))); // формула, по которой рисуем
    putpixel(real(z)*180+240, imag(z)*180+280, 14); //ставим точку на экране
  }
  getch(); // пауза для задержки изображения на экране
  closegraph();
  return 0;
}
Тогда для консоли переписываем

Код:
#include <math.h>
#include <conio.h>//graphics мы удаляем,он не для консоли; complex вроде тоже
#include "windows.h"

HWND hwnd;
HDC hdc;
RECT rc;
HPEN hpen;//это графика для консоли, если я правильно понимаю

void st()
{TCHAR title[256];
::GetConsoleTitle(title,256);
hwnd=::FindWindow(0,title);
hdc=::GetWindowDC(hwnd);
::SetWindowPos(hwnd,0,0,0,1000,1000,0);
::GetClientRect(hwnd,&rc);
hpen=::CreatePen(2,1,COLORREF(RGB(150,150,150)));
::SelectObject(hdc,hpen);}

int main()
{
  double a=0.85, b=0.9, k=0.5, p=7.7;
  real z; //если я правильно понимаю, comlex это типо real или что тогда?
  int gd=DETECT, gm; //я не знаю что это и как исправить
  int i;
   st() //initgraph(&gd, &gm, "G:\\programs\\BC31\\BGI"); - это удаляем
  z=0;
  for (i=0; i<=30000; i++)
  { z=a+b*z*exp(real(0,(k-p/(1+abs(z*z))))); // если я правильно понимаю, comlex это типо real, поэтому меняю на real
    POINT(real(z)*180+240, imag(z)*180+280, 14);  //можно вместо putpixel использовать POINT?
  }
  getch(); 
  return 0;
}
Я исчерпал все свои знания по этой теме,а программа не работает. Что-то заменить надо и подлатать, подскажите как

Последний раз редактировалось Аватар; 27.08.2015 в 10:50.
Дж.Лондон вне форума Ответить с цитированием
Старый 27.08.2015, 11:05   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

1) консоль НЕ для графики (ну, разве что первый вариант с подключением BGI), что чревато глюками жуткими
2) во второй проге откровенная хрень... откуда этому POINT-у знать где рисовать? да, ты получил дескрипторы окна, но что дальше? ты их не используешь
3) гугл -> простое окно wm_paint c++ -> 3я ссылка вроде норм
GreenWizard вне форума Ответить с цитированием
Старый 27.08.2015, 11:15   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

1. complex это комплексное число, которое имеет мнимую и действительную части (Re и Im)
2. вывод в консоли точки можно осуществить функцией SetPixel , например, SetPixel(hdc, i, j, RGB(0,0,255) );
3. не понимаю, какую фрактальную кривую вы строите, и где взяли формулу? В википедии нашел, что могут быть построены кривая Коха (снежинка Коха), кривая Леви, кривая Минковского, кривая Гильберта, ломаная (кривая) дракона (Фрактал Хартера-Хейтуэя), кривая Пеано, кривая Мякишева и др.
4. gd=DETECT, gm это в Borland C Builder может использоваться. У меня нет Borland C Builder.

я уперся в конструкцию z, так как z в с++ это класс. И непонятно, какие поля из класса должны использоваться.

довел программу до такого вида
Код:
#include <math.h>
#include <conio.h>
#include <windows.h>
#include <complex>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "gdi32.lib")

using namespace std;

HWND hwnd;
HDC hdc;
RECT rc;
HPEN hpen;//это графика для консоли, если я правильно понимаю

void st()
{TCHAR title[256];
::GetConsoleTitle(title,256);
hwnd=::FindWindow(0,title);
hdc=::GetWindowDC(hwnd);
::SetWindowPos(hwnd,0,0,0,1000,1000,0);
::GetClientRect(hwnd,&rc);
hpen=::CreatePen(2,1,COLORREF(RGB(150,150,150)));
::SelectObject(hdc,hpen);

// пример вывода точек в консоли
//int i, j;

//for(i=0;i<100;i++)
//for(j=0;j<100;j++)
//SetPixel(hdc, i, j, RGB(0,0,255) );

}

int main()
{
  double a=0.85, b=0.9, k=0.5, p=7.7;
  complex<double> z;
  int i;
   st();
  z=0;
  for (i=0; i<=30000; i++)
  { 

// тут проблема с * z *  и с abs(z*z). Что это за кривая?
z = a + b * z * exp( z.real(  0.0, ( k-p/(1.0+abs(z*z)) ) ) ); 
SetPixel(hdc, z.real()*180.0+240.0, z.imag()*180.0+280.0, RGB(0,0,255) );

  }
  getch(); 
  return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Информация в консольном приложении demigod82 Общие вопросы C/C++ 1 10.03.2012 09:26
PopupMenu в консольном приложении anger Общие вопросы Delphi 7 08.09.2011 13:56
Timer в консольном приложении Lauri Общие вопросы Delphi 8 05.04.2011 04:20
Графика в консольном приложении. Акунёк Общие вопросы C/C++ 11 19.03.2011 20:50
Вывод в консольном приложении Акунёк Общие вопросы C/C++ 6 16.02.2011 18:01