Как 'масштабировать' в на разделе Множества Мандельброта?

Во-первых, методы, оканчивающиеся на _=, являются специальными методами, которые представляют сеттеры. Вот почему подчеркивание работает только так, как вы думаете, в этом случае.

Теперь, вы можете получить желаемое поведение, имея публичную var listeners: Set[Int => Unit], но тогда люди могут делать другие вещи, такие как удаление слушателей. Вместо этого вы можете сделать так, чтобы слушатели были объектом, который определяет метод +=:

object listeners {
  def +=(listener: Int => Unit): Unit =
    myListeners += listener
  }
}

Поместите это в SubjectUnderObs, и оно должно работать.

5
задан Pete Kirkham 14 February 2009 в 11:01
поделиться

2 ответа

Строка:

box=((-2,1.25),(0.5,-1.25))

бит, который определяет область координатного пространства, которое представляется, таким образом, просто необходимо изменить эту строку. Первая координатная пара является верхней левой из области, вторым является нижнее правое.

Получить новую координату из изображения должно быть довольно простым. У Вас есть две системы координат, Ваша система "изображения" 100x100 пикселей в размере, источнике в (0,0). И Ваша "сложная" система координаты на плоскости определяется "полем". Для X:

X_complex=X_complex_origin+(X_image/X_image_width)*X_complex_width
14
ответ дан 18 December 2019 в 09:10
поделиться

Ключ в понимании, как сделать это, должен понять что coords = строка делает:

coords = (uleft[0] + (x/size[0]) * (xwidth),uleft[1] - (y/size[1]) * (ywidth))

Эффективно, x и y значения Вы - цикличное выполнение, посредством которого соответствуют координатам экранного пикселя, переводятся в соответствующую точку на комплексной плоскости, посмотревшей на. Это означает это (0,0) координата экрана переведет в верхний левый регион, посмотревший на (-2,1.25), и (1,0) будет то же, но перемещенный 1/500 расстояния (принимающий окно 500 пикселей шириной) между -2 и 0.5 x-координата.

Это точно, что делает та строка - я расширюсь просто, X-координата укусила с более иллюстративными именами переменной для указания на это:

mandel_x = mandel_start_x + (screen_x / screen_width) * mandel_width

( mandel_ переменные относятся к координатам на комплексной плоскости, screen_ переменные относятся к экранным координатам напечатанного пикселя.)

Если Вы хотите затем взять регион экрана для изменения масштаба в, Вы хотите сделать точно то же: возьмите координаты экрана верхнего левого и нижнего правого региона, переведите их в координаты комплексной плоскости и сделайте их новым uleft и легкими переменными. т.е. увеличить масштаб поля, разграниченного экранными координатами (x1, y1).. (x2, y2), используйте:

new_uleft = (uleft[0] + (x1/size[0]) * (xwidth), uleft[1] - (y1/size[1]) * (ywidth))
new_lright = (uleft[0] + (x2/size[0]) * (xwidth), uleft[1] - (y2/size[1]) * (ywidth))

(Очевидно, необходимо будет повторно вычислить размер, xwidth, ywidth и другие зависимые переменные на основе новых координат),

В случае, если Вам любопытно, математика позади множества Мандельброта не то, который усложнил (просто комплекс). Все, что это делает, берет конкретную координату, рассматривая его как комплексное число, и затем неоднократно придает ему квадратную форму и добавляет исходное число к нему.

Для некоторых чисел делая это вызовет результат, отличаются, постоянно растя к бесконечности, поскольку Вы повторяете процесс. Для других это будет всегда оставаться ниже определенного уровня (например, очевидно (0.0, 0.0) никогда не становится немного больше при этом процессе. Множество Мандельброта (черный регион) является теми координатами, которые не отличаются. Его, показанный, что, если какое-либо число добирается выше квадратного корня 5, это будет отличаться - Ваш код, просто использует 2.0 как его приближение к sqrt(5) (~2.236), но это не будет иметь большого заметного значения.

Обычно регионы, которые отличаются, напечатаны с количеством повторений процесса, который оно берет, чтобы они превысили это значение ( trials переменная в Вашем коде), который является тем, что производит цветные регионы.

4
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: