码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Android UI】贝塞尔曲线 ② ( 二阶贝塞尔曲线公式 | 三阶贝塞尔曲线及公式 | 高阶贝塞尔曲线 )


    文章目录

    • 一、二阶贝塞尔曲线公式
    • 二、三阶贝塞尔曲线
    • 三、高阶贝塞尔曲线


    贝塞尔曲线参考 : https://github.com/venshine/BezierMaker





    一、二阶贝塞尔曲线公式



    请添加图片描述

    二阶贝塞尔曲线公式如下 :

    B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 , t ∈ [ 0 , 1 ] B(t) = (1- t)^2P_0 + 2t(1-t)P_1 + t^2P_2, t \in [0,1] B(t)=(1−t)2P0​+2t(1−t)P1​+t2P2​,t∈[0,1]

    P 0 , P 1 , P 2 P_0 , P_1 , P_2 P0​,P1​,P2​ 是给定的 平面中的 3 3 3 个点 , P 0 P_0 P0​ 是 曲线起始点 , P 2 P_2 P2​ 是 曲线结束点 , P 1 P_1 P1​ 是控制点 ;

    t t t 的取值范围是 0.0 0.0 0.0 ~ 1.0 1.0 1.0 ;





    二、三阶贝塞尔曲线



    请添加图片描述

    上图中 , P 0 P_0 P0​ 点是起始点 , P 3 P_3 P3​ 点是终止点 , P 1 P_1 P1​ 和 P 2 P_2 P2​ 点是控制点 ;


    三阶贝塞尔曲线公式如下 :

    B ( t ) = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 , t ∈ [ 0 , 1 ] B(t) = (1- t)^3P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^3P_3, t \in [0,1] B(t)=(1−t)3P0​+3t(1−t)2P1​+3t2(1−t)P2​+t3P3​,t∈[0,1]


    先根据比例 , 绘制出 P 0 P_0 P0​ 与 P 2 P_2 P2​ 之间的二阶贝塞尔曲线 , 以 P 1 P_1 P1​ 为控制点 , 绘制出直线 A B AB AB ;

    然后 绘制 P 1 P_1 P1​ 与 P 3 P_3 P3​ 之间的二阶贝塞尔曲线 , 以 P 2 P_2 P2​ 为控制点 , 绘制出直线 B C BC BC ;

    最后 计算 A A A 到 C C C 之间的 二阶贝塞尔曲线 , 以 B B B 点作为 控制点 ;

    在这里插入图片描述

    三阶贝塞尔曲线动态绘制流程 :
    请添加图片描述





    三、高阶贝塞尔曲线



    B ( t ) = ∑ i = 0 n ( n i ) P i ( 1 − t ) n − i t i B(t) = \sum_{i = 0}^{n} \dbinom{n}{i} P_i (1-t)^{n - i}t^i B(t)=i=0∑n​(in​)Pi​(1−t)n−iti

    = ( n 0 ) P 0 ( 1 − t ) n t 0 + ( n 1 ) P 1 ( 1 − t ) n − 1 t 1 + ⋯ = \dbinom{n}{0} P_0 (1-t)^{n}t^0 + \dbinom{n}{1} P_1 (1-t)^{n - 1}t^1 + \cdots =(0n​)P0​(1−t)nt0+(1n​)P1​(1−t)n−1t1+⋯

    + ( n n − 1 ) P n − 1 ( 1 − t ) 1 t n − 1 + ( n n ) P n ( 1 − t ) 0 t n , t ∈ [ 0 , 1 ] + \dbinom{n}{n-1} P_{n-1} (1-t)^{1}t^{n -1} + \dbinom{n}{n} P_n (1-t)^{0}t^n , t \in [0,1] +(n−1n​)Pn−1​(1−t)1tn−1+(nn​)Pn​(1−t)0tn,t∈[0,1]

    上述公式中 i i i 是贝塞尔曲线的阶数 ;


    四阶贝塞尔曲线 :

    请添加图片描述


    五阶贝塞尔曲线 :

    请添加图片描述


  • 相关阅读:
    五十二、BBS项目
    视频监控平台客户端开发记录
    python redis 布隆过滤器实现
    java核心编程——IO流
    软件测试已经不吃香了?Sorry,职业技能教育的大幕才刚刚拉开,别再人云亦云!
    Web APIs——BOM和延迟函数setTimeout
    LabVIEW开发TDS1000 和TDS2000 系列泰克示波器
    图像处理:推导Canny边缘检测算法
    【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,包络熵,散布熵,究竟实现了什么?(第六篇)——“散布熵”及其MATLAB实现
    JavaScript基础(14)_in、hasOwnProperty、instanceof的用法、垃圾回收
  • 原文地址:https://blog.csdn.net/han1202012/article/details/125915230
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号