贝塞尔曲线~~~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贝塞尔曲线~~~相关的知识,希望对你有一定的参考价值。
贝塞尔第一类函数的具体表达式以及它的基本性质 以及曲线图~~~
参考技术A 贝塞尔曲线也称贝兹曲线,一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。当然在一些比较成熟的位图软件中也有贝塞尔曲线工具,如PhotoShop等。在Flash4中还没有完整的曲线工具,而在Flash5里面已经提供出贝塞尔曲线工具。贝塞尔函数
Bessel functions
利用柱坐标求解涉及在圆、球与圆柱内的势场的物理问题时出现的一类特殊函数。又称标函数。用柱坐标解拉普拉斯方程时,用到贝塞尔函数,它们和其他函数组合成柱调和函数。除初等函数外,在物理和工程中贝塞尔函数是最常用的函数,它们以19世纪德国天文学家F.W.贝塞尔的姓氏命名,他在1824年第一次描述过它们。贝塞尔函数最早出现在涉及如悬链振荡,长圆柱体冷却以及紧张膜振动的问题中。贝塞尔函数的一族,也称第一类贝塞尔函数,记作Jn(x),用x的偶次幂的无穷和来定义,数 n称为贝塞尔函数的阶,它依赖于函数所要解决的问题。J0 (x) 的图形像衰减的余弦曲线,J1(x)像衰减的正弦曲线( 见图 )。第二类贝塞尔函数( 又称诺伊曼函数 ),记作Yn(x),它由第一类贝塞尔函数的简单组合来定义。第三类贝塞尔函数(亦称汉克尔函数)定义为Hn=Jn±iYn,其中i为虚数,用n阶( 正或负 )贝塞尔函数可解称为贝塞尔方程的微分方程。
Android UI贝塞尔曲线 ③ ( 贝塞尔曲线关键点坐标记录 | 二阶贝塞尔曲线示例 )
文章目录
贝塞尔曲线参考 : https://github.com/venshine/BezierMaker
一、贝塞尔曲线关键点坐标记录
贝塞尔曲线 绘制时 , 使用 android.graphics.Path 记录 贝塞尔曲线 的 ① 起始点 , ② 终止点 , 以及 ③ 若干 控制点 ;
一阶贝塞尔曲线有 0 0 0 个控制点 , 二阶贝塞尔曲线有 1 1 1 个控制点 , 三阶贝塞尔曲线有 2 2 2 个控制点 , ⋯ \\cdots ⋯ , n n n 阶贝塞尔曲线 有 n − 1 n-1 n−1 个控制点 ;
二、二阶贝塞尔曲线示例
创建 android.graphics.Path 实例对象后 , 首先调用 Path#moveTo 方法 , 设置起始点 ;
Path#moveTo 函数原型如下 :
/**
* 将下一个轮廓的起点设置为点(x,y)。
*
* @param x 新轮廓起点的x坐标
* @param y 新轮廓起点的y坐标
*/
public void moveTo(float x, float y)
nMoveTo(mNativePath, x, y);
然后调用 Path#quadTo 方法 , 设置 二阶贝塞尔曲线 的 控制点 和 终止点 ;
/**
* 从最后一个点开始添加二次贝塞尔,
* 接近控制点(x1,y1),并在(x2,y2)处结束。
* 如果未对此轮廓进行moveTo()调用,
* 则第一个点将自动设置为(0,0)。
*
* @param x1 二次曲线上控制点的x坐标
* @param y1 二次曲线上控制点的y坐标
* @param x2 二次曲线端点的x坐标
* @param y2 二次曲线端点的y坐标
*/
public void quadTo(float x1, float y1, float x2, float y2)
isSimplePath = false;
nQuadTo(mNativePath, x1, y1, x2, y2);
最后 , 调用 Canvas 画布的 Canvas#drawPath 方法 , 将上述设置 起始点 控制点 终止点 的 Path 实例对象 绘制到画布上 ;
三、代码示例
package kim.hsl.android_ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class BesselCurve2 extends View
public BesselCurve2(Context context)
this(context, null);
public BesselCurve2(Context context, @Nullable AttributeSet attrs)
this(context, attrs, 0);
public BesselCurve2(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
@Override
protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight)
super.onSizeChanged(width, height, oldWidth, oldHeight);
@Override
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
// 初始化 曲线 和 画笔 实例对象
Path path = new Path();
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
// 设置起始点
path.moveTo(0, getHeight() / 2F);
// 设置控制点 和 终止点
path.quadTo(getWidth() / 2F, getHeight(), getWidth(), getHeight() / 2F);
// 绘制贝塞尔曲线
canvas.drawPath(path, paint);
绘制效果 :
以上是关于贝塞尔曲线~~~的主要内容,如果未能解决你的问题,请参考以下文章