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框架,结合C++编程语言,来创建一个具有图形用户界面的应用程序,用于绘制正弦(sin)和余弦(cos)函数的曲线,同时涉及傅里叶变换的概念。Qt是一个跨平台的开发框架,广泛应用...
这个"cos-sin"项目是关于如何利用HTML Canvas结合Math中的余弦(cos)和正弦(sin)函数来创建动态动画的一个示例。本文将深入探讨这个主题,包括余弦和正弦函数的基本概念、它们在Canvas中的应用,以及如何使用...
4. **数学函数**:为了模拟水波的波动,需要用到一些数学函数,比如正弦函数`Math.sin()`和余弦函数`Math.cos()`,它们可以生成周期性的变化,用于控制波纹的位置和幅度。 5. **透明度处理**:为了实现波纹逐渐消失...
在X和Y轴上分别应用Sin和Cos函数,可以创建出周期性的波形运动。在WPF中,我们可以使用数据绑定和`PathGeometry`来实现这样的动画。定义一个数据源,其值随着时间变化,该数据源会驱动路径的X和Y坐标,从而形成Sin和...
在本项目中,我们将探讨如何使用Microsoft Foundation Classes (MFC) 框架来创建一个图形界面应用程序,该程序能够绘制正弦(sine)和余弦(cosine)函数的图形,并支持用户通过鼠标滚轮进行缩放和平移操作。MFC是微软...
可以使用一个额外的参数来表示涟漪的半径和强度,随着时间的推移,这个参数会逐渐减小,从而使涟漪慢慢消失。这样可以模拟涟漪从中心扩散并逐渐消散的过程。 最后,将这些波动值与纹理颜色相结合,可以创建出动态的...
在实际应用中,这个工具可能包含一个输入框让用户输入函数表达式,一个按钮触发计算和绘图,还可能有一个预览区域显示函数图像。用户界面的响应性和易用性是Bootstrap框架的优势,它可以提供整洁、现代的布局,并...
今天,我们将详细介绍 Maya 中的数学函数,包括绝对值函数、 ceil 函数、floor 函数、clamp 函数、min 函数、max 函数、sign 函数、trunc 函数、exp 函数、log 函数、log10 函数、pow 函数、sqrt 函数、三角函数、反...
三角函数是数学中至关重要的一个领域,主要涉及三角形内角和边的关系。这些函数包括正弦(sin)、余弦(cos)、正切(tan)、余切(cot)、正割(sec)和余割(csc)。它们在物理学、工程学、计算机科学等多个IT领域...
本文将深入探讨如何利用iOS的UIKit框架和数学函数,特别是正弦函数和余弦函数,来实现这样一个自定义的水波纹动画。 首先,我们需要了解正弦和余弦函数。这两个函数是三角函数的基础,它们在计算机图形学中广泛用于...
6. 创建一个定时器,设置其Interval属性以控制动画速度。 7. 在定时器的Tick事件中,计算新的函数值,清除旧的曲线,然后绘制新的曲线。 8. 使用`Graphics`对象的`DrawCurve`或`DrawPolygon`方法根据计算出的函数值...
这可以通过使用sin或cos函数来实现,它们可以用来控制纹理坐标,产生周期性的变化。 2. **顶点动画**:顶点动画是指改变模型顶点位置的过程,以实现物体的动态变形。在水波效果中,可以动态调整水面模型的顶点位置...
// 创建水波纹形状 var waveShape:Shape = new Shape(); stage.addChild(waveShape); // 添加enterFrame事件监听器 stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event...
一个常见的方法是使用sin或cos函数来创建周期性的波动,并随着时间推移改变它们的幅度和相位,从而形成波纹扩散的效果。 在C#中,如果使用GDI+,我们可以创建一个`Graphics`对象,然后在它的`DrawImage()`方法中...
在MATLAB中,我们可以使用`figure`命令创建一个新的图形窗口,然后用`plot`函数来画圆。由于我们要画的是一个动态的圆,因此我们需要使用`animate`函数或者通过定时器更新图形来实现动画效果。 以下是一个简单的...
我们可以定义一个时间变量,随着时间的变化,利用sin和cos函数生成不同位置和幅度的波浪。这些波浪的叠加就形成了涟漪的效果。 代码可能会包含以下部分: 1. 初始化Canvas,设置其尺寸,并获取2D渲染上下文。 2. ...
可以使用sin()或cos()函数来模拟波浪的起伏,同时根据时间改变振幅和频率,模拟扩散效果。 在SpreadViewDemo项目中,我们可以看到以下实现方式: 1. **简单扩散**:首先,可以创建一个中心点,然后随着时间的推移...
关于路径跟踪,这个项目可能使用了`plot`函数来绘制sin和cos函数的图像,`plot(x, sin(x))`和`plot(x, cos(x))`分别绘制出正弦和余弦曲线。为了跟踪路径,可能还运用了`line`函数或者更新图形属性来动态地移动一个点...
在MATLAB中,可以使用`colormap`或`set`函数来改变颜色,配合`sin`或`cos`函数模拟有规律的波动,使得动画更富情感表达。 至于压缩包内的`license.txt`文件,这通常包含了软件的许可协议,对于MATLAB的代码或脚本,...
标题中的“一款纯AS的FLASH水波效果”指的是一个基于ActionScript(AS)编程语言创建的Flash动画,它实现了水波动态效果。在Flash中,ActionScript是用于添加交互性和功能性的主要脚本语言,而水波效果通常是指通过...