QBASICBOOK.ru: сайт про QB64

Опубликовано: 2020-05-26 08:00:00

«Классический» фрактал – папоротник

В этой статье представлена неплохая реализация «классического» фрактала по названием папоротник.

Рассмотрим исходный текст программы:


  1. DECLARE SUB MAKEBMP (NAMEBMP$)
  2. CONST ITERATIONS = 1000000
  3. DIM T AS DOUBLE, X AS DOUBLE, Y AS DOUBLE, P AS DOUBLE
  4. DIM K AS LONG
  5. DIM MIDX AS INTEGER, MIDY AS INTEGER, RADIUS AS INTEGER
  6. ON TIMER(1) GOSUB SHOWITER
  7. TIMER ON
  8. SCREEN 12
  9. FOR K = 1 TO 15
  10.     OUT &H3C8, K
  11.     IF K < 16 THEN
  12.         OUT &H3C9, K: OUT &H3C9, 25 + K * 2: OUT &H3C9, 0
  13.     ELSE OUT &H3C9, K: OUT &H3C9, 54: OUT &H3C9, 0
  14.     END IF
  15. NEXT: K = 10
  16. MIDX = 320
  17. MIDY = 480
  18. RADIUS = .1 * MIDY
  19. RANDOMIZE TIMER
  20. X = 1
  21. Y = 0
  22. FOR K = 1 TO ITERATIONS
  23.     P = RND
  24.     T = X
  25.     IF P <= .85 THEN
  26.         X = .85 * X + .04 * Y
  27.         Y = -.04 * T + .85 * Y + 1.6
  28.     ELSE
  29.         IF P <= .92 THEN
  30.             X = .2 * X - .26 * Y
  31.             Y = .23 * T + .22 * Y + 1.6
  32.         ELSE
  33.             IF P <= .99 THEN
  34.                 X = -.15 * X + .28 * Y
  35.                 Y = .26 * T + .24 * Y + .44
  36.             ELSE
  37.                 X = 0
  38.                 Y = .16 * Y
  39.             END IF
  40.         END IF
  41.     END IF
  42.     PSET (MIDX + RADIUS * X, MIDY - RADIUS * Y), POINT(MIDX + RADIUS * X, MIDY - RADIUS * Y) + 1
  43. NEXT
  44. MAKEBMP "PAPOROTNIK"
  45. END
  46. SHOWITER: LOCATE 1: PRINT "ITERATIONS: "; K: IF INKEY$ <> "" THEN END
  47. RETURN
  48. BGDT: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0
  49. DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0
  50. DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
  51. SUB MAKEBMP (NAMEBMP$)
  52. OPEN NAMEBMP$ + ".BMP" FOR BINARY AS #3
  53. RESTORE BGDT
  54. FOR BYTE& = 1 TO 54
  55.     READ ZGLV%: PUT #3, BYTE&, ZGLV%
  56. NEXT BYTE&: BYTE& = 55
  57. FOR II% = 0 TO 255
  58.     OUT &H3C7, II%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4
  59.     BT1% = CVI(CHR$(B%) + CHR$(G%)): BT2% = CVI(CHR$(R%) + "№")
  60.     PUT #3, BYTE&, BT1%: PUT #3, BYTE& + 2, BT2%
  61.     BYTE& = BYTE& + 4
  62. NEXT II%
  63. FOR Y% = 479 TO 0 STEP -1
  64.     FOR X% = 0 TO 639
  65.         CVE% = POINT(X%, Y%)
  66.         PUT #3, BYTE&, CVE%: BYTE& = BYTE& + 1
  67.     NEXT X%
  68. NEXT Y%
  69. CLOSE #3
  70. END SUB

Рисунок 1 – Исходный текст для построения фрактала-папоротника 

Рисунок 1 – Исходный текст для построения фрактала-папоротника

Рисунок 2 – Результат построения фрактала-папоротника 

Рисунок 2 – Результат построения фрактала-папоротника

Программа сохранит полученный результат в файл под названием PAPOROTNIK.BMP.

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Циклоида
Следующая статья >
Конвертирование бинарных данных из формата *.BMP в DATA

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.