К основному контенту

Функциональное программирование на платформе .Net

 
 
open System

let rec rpt n f =
    if n = 0 then id
    else f >> (rpt (n-1) f)

type Complex = 
    { Re : float
      Im : float }

let cm (a:Complex) (b:Complex) =
    { Re = (a.Re * b.Re - a.Im * b.Im); Im = (a.Re*b.Im + a.Im*b.Re)}
let cp (a:Complex) (b:Complex) =
    { Re = (a.Re + b.Re); Im = (a.Im + b.Im)}  

let absComplex (a:Complex) : float = sqrt ( a.Re * a.Re + a.Im * a.Im)
    
let mandelf (c: Complex) (z:Complex) = cp (cm z  z)  c

let isMandel c = absComplex(rpt 20 (mandelf c) ({Re = 0.; Im=0.})) < 1.0
let scale (x:float, y:float) (u,v) n = float(n-u)/float(v-u) * (y-x) + x

for i = 1 to 60 do
    for j = 1 to 60 do
        let lscale = scale (-1.2, 1.2) (1,60) in
        let t = {Re = lscale j; Im = lscale i} in
        Console.Write(if isMandel t then "*" else " ")
    Console.WriteLine("")     

open System.Drawing
open System.Windows.Forms

let form = 
    let image = new Bitmap(400,400)
    let lscale = scale (-1.2, 1.2) (0,image.Height - 1) 
    for i = 0 to image.Height - 1 do
        for j = 1 to image.Width - 1 do
            let t = {Re = lscale j; Im = lscale i}
            image.SetPixel(i,j, if isMandel t then Color.LightGoldenrodYellow else Color.Orange)
    image.Save(@"fs.png")            
    let temp = new Form( Height = image.Height, Width = image.Width)
    temp.Paint.Add (fun e -> e.Graphics.DrawImage(image,0,0))             
    temp

[<STAThread>] do Application.Run(form)   

Комментарии

Популярные сообщения из этого блога

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);

Arch Linux - руссификация консоли

Вчера, придя с работы, как всегда затеял InstallFest. Уже практически не задумываясь установил свежий арч. И тут заметил что в tty вместо русского - квадратики. Под утро нашел таки сообщение на форме, что в этом виноваты дрова от видео. Там правда речь шла о нвидиа, а у меня ати. Буду пробовать. И еще в lxterminal обратил внимание что сообщения на русском, а то что я вводил на русском потом возвращается системой в виде юникод-символов. Вот такие дела. UPDATE: драйвер не причем. переустановил в консоли(до установки X) по прежнему квадратики вместо букв. неужели придется переключатся на инглиш? Заметил что initscripts скачался c какого-то зеркала не с яндекса. возможно причина в нем.