С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 06.06.2010
Сообщений: 21
1

Кривая дракона порядка n. С 1 и 0.

15.06.2010, 12:59. Показов 3887. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кривые дракона, показанные на рис.73 могут быть построены с помощью следующего рекурентного метода. Каждой кривой ставится в соответсвие последовательность, состоящая из нулей и единиц(будем называть её двоичной формулой), где единица соответствует повороту кривой налево, а нуль-повороту направо. Кривая дракона первого порядка имеет двоичную формулу 1(рис. 73,а). Для того чтобы получить двоичную формулу
кривой дракона каждого следующего порядка, следует приписать справа к формуле кривой предыдущего порядка единицу. Полученная последовательность дает половину искомой формулы. Затем в последовательности цифр, предшествующих приписанной единице, следует заменить на нуль единицу, стоящую в её середине, после чего приписать полученную последовательность справа от уже построенной части формулы. На рис. 73,б показана кривая дракона второго порядка, которой соответствует двоичная формула 110, а на рис. 73,в-кривая дракона третьего порядка-ей соответствует двоичная формула 1101100.
Кривые строятся от хвоста к голове дракона и повёрнуты так, чтобы драконы “плыли” направо, а пасть и кончик скругляются другой окружности или срезаются для того , чьлбы вершины углов не соприкасались и не создавалась иллюзия самопересечения кривой.
Дано натуральное n. Получить кривую дракона порядка n.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2010, 12:59
Ответы с готовыми решениями:

Дракон Хартера-Хайтвея(Кривая дракона)
Объясните как рисовать Дракона Хартера-Хайтвея(не с закруглёнными, а с ровными линиями). У меня в...

кривая дракона
Задание заключается в построении данного рисунка на Дельфи ...

Кривая дракона
Разработайте сценарий для веб-страницы, который генерирует последовательность из N чисел,...

Кривая Дракона
uses SmallTurtle; const Angle = 90; StringWay =...

4
0 / 0 / 0
Регистрация: 06.06.2010
Сообщений: 21
15.06.2010, 13:02  [ТС] 2
Вот файл с Рисунками.
Вложения
Тип файла: doc Кривые дракона.doc (29.5 Кб, 90 просмотров)
0
80 / 82 / 36
Регистрация: 20.11.2009
Сообщений: 326
15.06.2010, 13:28 3
Для Абц Паскаля:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program dragon;
uses graphABC, crt;
var k,m:integer;
procedure ris(x1,y1,x2,y2,k:integer);
var xn,yn:integer;
begin
   if k>0 then
   begin
      xn:=(x1+x2) div 2 +(y2-y1) div 2;
      yn:=(y1+y2) div 2 -(x2-x1) div 2;
      ris(x1,y1,xn,yn,k-1);
      ris(x2,y2,xn,yn,k-1);
   end
   else begin line(x1,y1,x2,y2); end;
end;
begin
   readln ( k );{задаем порядок кривой}
      ris(200,300,500,300,k);
   end.
Для Турбо.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program dragon; 
uses graph; 
var k,d,m:integer; 
procedure ris(x1,y1,x2,y2,k:integer); 
var xn,yn:integer; 
begin 
   if k>0 then 
   begin 
      xn:=(x1+x2) div 2 +(y2-y1) div 2; 
      yn:=(y1+y2) div 2 -(x2-x1) div 2; 
      ris(x1,y1,xn,yn,k-1); 
      ris(x2,y2,xn,yn,k-1); 
   end 
   else begin line(x1,y1,x2,y2); end; 
end; 
begin 
   readln ( k );{задаем порядок кривой} 
   d:=detect; 
   initgraph(d,m,"e:\bp\bgi"); 
   ris(200,300,500,300,k); 
   readln; 
end.
Ко второму коду я рук не прикладывал, дергал исходник. Когда-то первый писал и сам, но тот вариант, что здесь, тоже сперт из интернетов
0
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
15.06.2010, 13:29 4
Вот программа, рисующая эту вещь.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses graph,crt;
var x,y,x1,y1,x2,y2,n:integer;
procedure Dragon(x1,y1,x2,y2,Depth:Longint);
  procedure Paint(x1,y1,x2,y2,k:Longint);
  var tx,ty:Longint;
  begin
   if k=0 then
    begin
     MoveTo(x1,y1);
     LineTo(x2,y2);
     Exit;
    end;
   tx:=(x1+x2) div 2+(y2-y1) div 2;
   ty:=(y1+y2) div 2-(x2-x1) div 2;
   Paint(x2,y2,tx,ty,k-1);
   Paint(x1,y1,tx,ty,k-1);
  end;
begin
 Paint(x1,y1,x2,y2,Depth);
end;
begin
x:=0;
initgraph(x,y,'');
n:=1;
repeat
Dragon(200,300,500,300,n);
delay(500);
cleardevice;
n:=n+1;
until n=20;
delay(2000);
outtextXY(300,240,'Konec!');
outtextXY(280,260,'Press any key...');
readkey
end.
Вот еще что-то девушка писала, не смотрел.
Графика
0
0 / 0 / 0
Регистрация: 06.06.2010
Сообщений: 21
16.06.2010, 21:56  [ТС] 5
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
uses
  crt, graph;
type
  otrezok = record
    x1, y1, x2, y2: integer
  end;
var
  l: otrezok;
  GraphDriver, GraphMode: integer;
  dx, dy, r, rx, ry, i, tx, ty: integer;
  s: string;
 
procedure Nachalo;
  begin
    writeln('>>> Vvedite X nachalnoy tochki i nazhmite ENTER:');
    readln(l.x1);
    writeln('>>> Vvedite Y nachalnoy tochki i nazhmite ENTER:');
    readln(l.y1);
    writeln('>>> Vvedite X konechnoy tochki i nazhmite ENTER:');
    readln(l.x2);
    writeln('>>> Vvedite Y konechnoy tochki i nazhmite ENTER:');
    readln(l.y2);
    writeln('>>> Vvedite posledovatelnost nuley i edinic i nazhmite ENTER:');
    readln(s);
    dx:=abs(l.x1-l.x2);
    dy:=abs(l.y1-l.y2);
    r:=round(sqrt(sqr(dx)+sqr(dy)));
    rx:=round(r*cos(arctan(dy/dx)+pi/2));
    ry:=round(r*sin(arctan(dy/dx)+pi/2));
  end;
 
procedure Init;
  begin
    GraphDriver:=Detect;
    GraphMode:=1;
    InitGraph(GraphDriver, GraphMode, '');
  end;
 
procedure Drago(x, y: integer; flag: char);
  begin
    if flag='0'
      then
    begin
      rx:=round(r*cos(arctan(dy/dx)));
      ry:=round(r*sin(arctan(dy/dx)))
    end
      else
    begin
      rx:=round(r*cos(arctan(dy/dx)-pi/2));
      ry:=round(r*sin(arctan(dy/dx)-pi/2))
    end;
    tx:=x+rx;
    ty:=y+ry;
    line(x,y,tx,ty);
    l.x2:=tx;
    l.y2:=ty
  end;
 
begin
  clrscr;
  Nachalo;
  Init;
  line(l.x1,l.y1,l.x2,l.y2);
  for i:=1 to length(s) do
    begin
      Drago(l.x2,l.y2,s[i]);
    end;
  readln;
  closegraph;
end.
А как вы отнесётесь к этому коду? но тут у меня какая то ошибка, не могу понять. При повторении допустим 11 или 00 он не поворачивает в нужное направление а строит одну продолжающую прямую. посмотрите может что нить тут можно будет исправить?

Добавлено через 1 минуту
Pascal
1
2
tx:=(x1+x2) div 2+(y2-y1) div 2;
   ty:=(y1+y2) div 2-(x2-x1) div 2;
Что считают эти формулы? не совсем их понимаю. И еще забыл дополнить нужно чтобы он к исходной прямой делал перпендикуляр, который собственно непосредственно задавался направлением 1 или 0.

Добавлено через 3 часа 37 минут
Помогите пожалуйста??

Добавлено через 17 часов 33 минуты
Тема всё еще актульна....

Добавлено через 6 часов 27 минут
Ну что ни кто ни найдёт моей ошибки?

Добавлено через 4 часа 13 минут
Навер!
0
16.06.2010, 21:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2010, 21:56
Помогаю со студенческими работами здесь

Фрактал "Кривая дракона"
Еще одно небольшое задание для энтузиастов, вообщем у кого есть похожие приложения или вы знаете...

Кривая второго порядка....
Помогите решить хоть что нибудь!! Определить вид и расположение кривой второго порядка x^2 - 4y^2...

Кривая второго порядка
Начальное уравнение: 4x^2+4y^2+2xy+12x+12y+1=0 σ>0-уравнение эллиптическое. После...

Кривая второго порядка
Как в MathCad построить график прямой второго порядка?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru