JavaFX
Advertisement

Главная | Описание языка | FXD | API | Примеры | Инструменты Разработки | Новости | Ресурсы | Форум

Построение графика функции[]

Function graphic compiler


Этот пример демонстрирует, как можно нарисовать график функции на языке JavaFX Script


Определение функции[]

function f1(x:Number):Number{
    return 6 * Math.exp( -(x * x ) / 2 );
};

function f2(x:Number):Number{
    var n = 10; 

    var sum = 0.0;
    var sign = 1.0;
    

    for(i in [1..n]){

        sign = -sign;
        sum += ((1 - sign) * Math.sin(i * x)) / i; 
    }

    return sum;
};

Изображение функции[]

class FuncGraph extends CustomNode{

    var scale:Number = 1;
    var xMin: Number;
    var xMax: Number;
    var dx: Number = 1;
    var color: Color;

    var func: function(a: Number):Number;

    override function create():Node{

        var n = (xMax - xMin) / dx;

        Group{
            content: Polyline{
                stroke: color
                points: for(i in [0..n]) [(xMin + i * dx) * scale, - func(xMin + i * dx) * scale]
            }
        }
    }
}

Изображение координат[]

Function graphic coordinats

class Coordinats extends CustomNode{

    var xMin: Number;
    var xMax: Number;
    var scale: Number;
    var color: Color = Color.GREEN;

    override function create():Node{
      var min = xMin * scale;
      var max = xMax * scale;
      var h = 7;

      Group{
        content:[
            Line{ startX: min endX: max stroke: color },
            Line{ startX: max endX: max - h endY: h stroke: color },
            Line{ startX: max endX: max - h endY: -h stroke: color },
            Line{ startY: min endY: max stroke: color },
            Line{ startY: min  endX: -h endY: min + h stroke: color },
            Line{ startY: min  endX:  h endY: min + h stroke: color },
            Group{
                content: [
                    Text{ x: min y: -3 content: "{xMin}" },
                    Text{ x: max y: -3 content: "{xMax}"}
                ]
              }
            ]
      }
    }
}

Главное окно приложения[]

var w = 300;
var h = 300;

var xMin = -4;
var xMax = 4;

var dx = 0.1;
var scale = 20;


Stage {
    title: "Function Graph"
    width:  300
    height: 300

    scene: Scene{
     content: Group{

            transforms: Translate.translate(w/2, h/2)
            content: [
                Coordinats{
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                }, FuncGraph {
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                    dx: dx
                    color: Color.DARKORANGE
                    func: f1
                },FuncGraph {
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                    dx: dx
                    color: Color.BLUE
                    func: f2
            }
        ]
      }
   }
}

Полный пример[]

import javafx.scene.*;
import javafx.stage.*;
import javafx.scene.text.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.transform.*;

import java.lang.Math;


function f1(x:Number):Number{
    return 3 * Math.exp( -(x * x ) / 2 );
};

function f2(x:Number):Number{
    var n = 10;

    var sum = 0.0;
    var sign = 1.0;


    for(i in [1..n]){

        sign = -sign;
        sum += ((1 - sign) * Math.sin(i * x)) / i;
    }

    return sum;
};


class FuncGraph extends CustomNode{

    var scale:Number = 1;
    var xMin: Number;
    var xMax: Number;
    var dx: Number = 1;
    var color: Color;

    var func: function(a: Number):Number;

    override function create():Node{

        var n = (xMax - xMin) / dx;

        Group{
            content: Polyline{
                stroke: color
                points: for(i in [0..n]) [(xMin + i * dx) * scale, - func(xMin + i * dx) * scale]
            }
        }
    }
}


class Coordinats extends CustomNode{

    var xMin: Number;
    var xMax: Number;
    var scale: Number;
    var color: Color = Color.GREEN;

    override function create():Node{
      var min = xMin * scale;
      var max = xMax * scale;
      var h = 7;

      Group{
        content:[
            Line{ startX: min endX: max stroke: color },
            Line{ startX: max endX: max - h endY: h stroke: color },
            Line{ startX: max endX: max - h endY: -h stroke: color },
            Line{ startY: min endY: max stroke: color },
            Line{ startY: min  endX: -h endY: min + h stroke: color },
            Line{ startY: min  endX:  h endY: min + h stroke: color },
            Group{
                content: [
                    Text{ x: min y: -3 content: "{xMin}" },
                    Text{ x: max y: -3 content: "{xMax}"}
                ]
              }
            ]
      }
    }
}

var w = 300;
var h = 300;

var xMin = -4;
var xMax = 4;

var dx = 0.1;
var scale = 20;


Stage {
    title: "Function Graph"
    width:  300
    height: 300

    scene: Scene{
     content: Group{

            transforms: Translate.translate(w/2, h/2)
            content: [
                Coordinats{
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                }, FuncGraph {
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                    dx: dx
                    color: Color.DARKORANGE
                    func: f1
                },FuncGraph {
                    xMin: xMin
                    xMax: xMax
                    scale: scale
                    dx: dx
                    color: Color.BLUE
                    func: f2
            }
        ]
      }
   }
}

Advertisement