`
xhuixuanwen
  • 浏览: 6363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

用sin,cos函数创建一个真实的水波动画

阅读更多
package waveanim;

import javafx.stage.Stage;
import javafx.scene.Scene;
import java.lang.Math;
import javafx.scene.*;
import javafx.scene.effect.*;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import java.lang.Math.*;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;

/**
* @author Administrator
*/

var w = 300;
var h = 274;
var map:FloatMap;
//amplitude
var A:Number = 1/200.0;
//frequency
var f:Number = 0.08;
//horizontal phase angle
var upangle:Number = 90;
//vertical phase angle
var vpangle:Number = 0 on replace {
    map = FloatMap { width: w height: h };
    for (i:Integer in [0..w-1]) {
        var u = A*cos(i*f + upangle);
        for (j:Integer in [0..h-1]) {
            var v = A*sin(j*f + vpangle);
            map.setSamples(i, j, u, v);
        }
    }
};

Timeline {
        repeatCount: Timeline.INDEFINITE
        keyFrames : [
            KeyFrame {
                time : 150ms
                action: function() {
                     upangle ++;
                     vpangle ++;
                }
            }
        ]
}.play();

Stage {
    title: "水波动画"
    width: 285
    height: 290
    scene: Scene {
        content: [
            ImageView {
                effect: DisplacementMap { mapData: bind map }
                x: -2
                y: -2
                image: Image {
                    url: "{__DIR__}flower.jpg"
                }
            }
        ]
    }
}
把图形文件同源程序放在同一个目录中,试一试!

波动的原理见第二个图,这是水面的横截面,每个质点都绕着自已的中心做园规迹的运动,
如果从上向下看,也就是从水面上看,质点都在中心左右来回摆动.
和序如下,
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import java.lang.Math.*;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.animation.Interpolator;
import javafx.scene.shape.Line;
/**
* @author Administrator
*/
var t:Number = 0;
Timeline {
    repeatCount: Timeline.INDEFINITE
    keyFrames : [
        KeyFrame {
            time : 100ms
            action: function() {
                    t+=1;
            }
        }
    ]
}.play();


Stage {
    title: "水波原理"
    width: 450
    height: 180
    scene: Scene {
        content: [
            for (i in [0..16])
                Circle {
                    centerX: 15+i*25
                    centerY: 50
                    radius: 12.5
                    strokeDashOffset: 2
                    strokeDashArray: [4]
                    fill: null
                    stroke: Color.GRAY
                },
            for (i in [0..16])
                Circle {
                    fill: Color.MAGENTA
                    centerX: bind 15+i*25 + 12.5*cos(i*0.5 + t)
                    centerY: bind 50 + 12.5*sin(i*0.5 + t)
                    radius: 3

                }
            for (i in [0..16])
                Line {
                    startX: 15+i*25
                    startY: 50
                    endX: bind 15+i*25 + 12.5*cos(i*0.5 + t)
                    endY: bind 50 + 12.5*sin(i*0.5 + t)
                    strokeWidth: 1
                    stroke: Color.GRAY
                }


        ]
    }
}
也可做成园形的波动,水波向外传播。见图3
javafx站点有个RippleEffect虽然也是用sin, cos但两者的效果如何自已去比较了.
  • 大小: 19.5 KB
  • 大小: 3.5 KB
  • 大小: 147.1 KB
分享到:
评论

相关推荐

    Qt画sin、cos曲线

    在本文中,我们将深入探讨如何使用Qt框架,结合C++编程语言,来创建一个具有图形用户界面的应用程序,用于绘制正弦(sin)和余弦(cos)函数的曲线,同时涉及傅里叶变换的概念。Qt是一个跨平台的开发框架,广泛应用...

    cos-sin:使用cos和sin函数HTML Canvas Math示例

    这个"cos-sin"项目是关于如何利用HTML Canvas结合Math中的余弦(cos)和正弦(sin)函数来创建动态动画的一个示例。本文将深入探讨这个主题,包括余弦和正弦函数的基本概念、它们在Canvas中的应用,以及如何使用...

    HTML5 canvas水波纹动画特效源码.zip

    4. **数学函数**:为了模拟水波的波动,需要用到一些数学函数,比如正弦函数`Math.sin()`和余弦函数`Math.cos()`,它们可以生成周期性的变化,用于控制波纹的位置和幅度。 5. **透明度处理**:为了实现波纹逐渐消失...

    WPF实现圆心运动Sin&Cos运动,扇形运动演示.rar

    在X和Y轴上分别应用Sin和Cos函数,可以创建出周期性的波形运动。在WPF中,我们可以使用数据绑定和`PathGeometry`来实现这样的动画。定义一个数据源,其值随着时间变化,该数据源会驱动路径的X和Y坐标,从而形成Sin和...

    利用MFC画sin和cos图形,可以用滚轮缩放,平移

    在本项目中,我们将探讨如何使用Microsoft Foundation Classes (MFC) 框架来创建一个图形界面应用程序,该程序能够绘制正弦(sine)和余弦(cosine)函数的图形,并支持用户通过鼠标滚轮进行缩放和平移操作。MFC是微软...

    unity用shader来实现2D涟漪/水波纹特效

    可以使用一个额外的参数来表示涟漪的半径和强度,随着时间的推移,这个参数会逐渐减小,从而使涟漪慢慢消失。这样可以模拟涟漪从中心扩散并逐渐消散的过程。 最后,将这些波动值与纹理颜色相结合,可以创建出动态的...

    HTML5数学函数公式计算代码.zip

    在实际应用中,这个工具可能包含一个输入框让用户输入函数表达式,一个按钮触发计算和绘图,还可能有一个预览区域显示函数图像。用户界面的响应性和易用性是Bootstrap框架的优势,它可以提供整洁、现代的布局,并...

    maya所有函数的_算法

    今天,我们将详细介绍 Maya 中的数学函数,包括绝对值函数、 ceil 函数、floor 函数、clamp 函数、min 函数、max 函数、sign 函数、trunc 函数、exp 函数、log 函数、log10 函数、pow 函数、sqrt 函数、三角函数、反...

    iOS 水波纹波浪形式

    本文将深入探讨如何利用iOS的UIKit框架和数学函数,特别是正弦函数和余弦函数,来实现这样一个自定义的水波纹动画。 首先,我们需要了解正弦和余弦函数。这两个函数是三角函数的基础,它们在计算机图形学中广泛用于...

    用vb画三角函数曲线,动态演示

    6. 创建一个定时器,设置其Interval属性以控制动画速度。 7. 在定时器的Tick事件中,计算新的函数值,清除旧的曲线,然后绘制新的曲线。 8. 使用`Graphics`对象的`DrawCurve`或`DrawPolygon`方法根据计算出的函数值...

    水波效果生成源代码

    这可以通过使用sin或cos函数来实现,它们可以用来控制纹理坐标,产生周期性的变化。 2. **顶点动画**:顶点动画是指改变模型顶点位置的过程,以实现物体的动态变形。在水波效果中,可以动态调整水面模型的顶点位置...

    flash代码实现图片水波纹效果(as3)

    // 创建水波纹形状 var waveShape:Shape = new Shape(); stage.addChild(waveShape); // 添加enterFrame事件监听器 stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event...

    C#水波纹效果

    一个常见的方法是使用sin或cos函数来创建周期性的波动,并随着时间推移改变它们的幅度和相位,从而形成波纹扩散的效果。 在C#中,如果使用GDI+,我们可以创建一个`Graphics`对象,然后在它的`DrawImage()`方法中...

    matlab高阶运用 (2)_frequently8k3_画一个圆_matlab动画_

    在MATLAB中,我们可以使用`figure`命令创建一个新的图形窗口,然后用`plot`函数来画圆。由于我们要画的是一个动态的圆,因此我们需要使用`animate`函数或者通过定时器更新图形来实现动画效果。 以下是一个简单的...

    基于HTML5 Canvas的水波涟漪特效源码.zip

    我们可以定义一个时间变量,随着时间的变化,利用sin和cos函数生成不同位置和幅度的波浪。这些波浪的叠加就形成了涟漪的效果。 代码可能会包含以下部分: 1. 初始化Canvas,设置其尺寸,并获取2D渲染上下文。 2. ...

    Android自定义View实现类似水波扩散效果

    可以使用sin()或cos()函数来模拟波浪的起伏,同时根据时间改变振幅和频率,模拟扩散效果。 在SpreadViewDemo项目中,我们可以看到以下实现方式: 1. **简单扩散**:首先,可以创建一个中心点,然后随着时间的推移...

    正弦和余弦路径跟踪和动画:它将跟踪sin和cos曲线的路径-matlab开发

    关于路径跟踪,这个项目可能使用了`plot`函数来绘制sin和cos函数的图像,`plot(x, sin(x))`和`plot(x, cos(x))`分别绘制出正弦和余弦曲线。为了跟踪路径,可能还运用了`line`函数或者更新图形属性来动态地移动一个点...

    matlab 的情人节红心动画

    在MATLAB中,可以使用`colormap`或`set`函数来改变颜色,配合`sin`或`cos`函数模拟有规律的波动,使得动画更富情感表达。 至于压缩包内的`license.txt`文件,这通常包含了软件的许可协议,对于MATLAB的代码或脚本,...

    一款纯AS的FLASH水波效果

    标题中的“一款纯AS的FLASH水波效果”指的是一个基于ActionScript(AS)编程语言创建的Flash动画,它实现了水波动态效果。在Flash中,ActionScript是用于添加交互性和功能性的主要脚本语言,而水波效果通常是指通过...

    算术表达式计算(包阔常用函数),并生成图片数据

    最后,`round()` 函数对这个结果进行四舍五入,确保得到一个整数。 2. `(abs(x+2*y) % 0.75)*10+y/5` 这个表达式包含了绝对值函数 `abs()`,它返回 `x + 2*y` 的非负值。然后,使用取模运算 `%` 对结果除以 0.75 ...

Global site tag (gtag.js) - Google Analytics