LCME Суббота, 29.04.2017, 12:31
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Для истинных фанатов » OCaml » График функции от 2х переменных (дело было вечером...)
График функции от 2х переменных
freidomДата: Суббота, 03.10.2009, 23:29 | Сообщение # 1
Главный тут
Группа: Администраторы
Сообщений: 273
Репутация: 20
Статус: Offline
open Graphics;;
open List;;

let scalar a b =
fold_left (+.) (0.) (map2 ( *. ) a b);;

let mul_vm m v =
map (scalar v) m;;

let rotate_point_x x point =
mul_vm [[1.; 0.; 0.];[0.; cos x; -.(sin x)];[0.; sin x; cos x]] point;;

let rotate_point_y y point =
mul_vm [[cos y; 0.; sin y];[0.; 1.; 0.];[-.(sin y); 0.; cos y]] point;;

let rotate_point_z z point =
mul_vm [[cos z; -.(sin z); 0.];[sin z; cos z; 0.];[0.; 0.; 1.]] point;;

let rotate_point x y z point =
rotate_point_x x (rotate_point_y y (rotate_point_z z point));;

let rotate_graph x y z = map (rotate_point x y z);;

let stretch_point q = map (( *. ) q);;

let stretch_graph q = map (stretch_point q);;

let f x y = sin (x ** y);;

let gen_graph lowlim_x highlim_x lowlim_y highlim_y step_x step_y =
let rec gg cur_x cur_y =
if cur_x > highlim_x then [] else
if cur_y > highlim_y then gg (cur_x +. step_x) lowlim_y else
[cur_x; cur_y; f cur_x cur_y]::(gg cur_x (cur_y +. step_y))
in gg lowlim_x lowlim_y;;

let rec draw_graph points =
match points with
[] -> ()
|[x;y;_]::ls -> plot ((int_of_float x) + ((size_x ()) / 2)) ((int_of_float y) + ((size_y ()) / 2)); draw_graph ls
|_ -> failwith "Strange point";;

let rec render graph =
if not (key_pressed ()) then (clear_graph (); draw_graph graph; render (rotate_graph 0.02 0.01 0.03 graph));;

let sin_graph = stretch_graph 100. (gen_graph (0.01) 3. (0.01) 3. 0.05 0.05);;

open_graph "";;

render sin_graph;;

read_key ();;

close_graph ();;

Прикрепления: fungraph.ml(2Kb)
 
Форум » Для истинных фанатов » OCaml » График функции от 2х переменных (дело было вечером...)
Страница 1 из 11
Поиск:

Copyright Freidom © 2017 Хостинг от uCoz