使用贝塞尔曲线算法制作曲线

news2024/11/23 18:37:33

一阶贝塞尔曲线

使用两个点绘制线段
p3=p1+(p2-p1)*t

  1. p1:起点;
  2. p2:终点;
  3. t:0-1;
  4. p3:线段L12上的点
    两个点和t的变化(0-1)可得到一条线段

二阶贝塞尔曲线

使用三个点绘制曲线
p12=p1+(p2-p1)*t
p23=p2+(p3-p2)*t
p123=p12+(p23-p12)*t
p12是线段L12上的点,
p23是线段L23上的点,
p123是线段L12 23上的点
控制p2的位置,可改变曲线的弯曲程度

示例

一阶贝塞尔,二阶贝塞尔

using UnityEngine;
public static class Curve
{
    public static Vector3 CurveOne(Vector3 begin, Vector3 end, float percentage)
    {
        return begin + (end - begin) * Mathf.Clamp01(percentage);
    }
    public static Vector3 CurveTwo(Vector3 begin, Vector3 center, Vector3 end, float percentage)
    {
        return CurveOne(CurveOne(begin, center, percentage), CurveOne(center, end, percentage), percentage);
    }
}

绘制曲线

using UnityEngine;
public class DrawCurve : MonoBehaviour
{
    public Transform point;//位置1
    public Transform point2;
    public Transform point3;
    [Range(1, 1000)]
    public int length;//曲线平滑程度
    float t;
    public LineRenderer line;//显示曲线
    private void Update()
    {
        if (line.positionCount != length + 1)
            line.positionCount = length + 1;
        for (int i = 0; i <= length; i++)
        {
            t = i;
            line.SetPosition(i, Curve.CurveTwo(point.position, point2.position, point3.position, t / length));
        }
    }
}

改变p2位置

using UnityEngine;
public class ChangePos : MonoBehaviour
{
    [SerializeField] float moveSpeed = 10;
    private void Update()
    {
        transform.position += transform.up * Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;
    }
}

画面展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/892715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android:绘图 (android.graphics包)

android:绘图 View&#xff1a;组件&#xff0c;理解为画布 Drawable:所有可见对象的描述&#xff0c;理解为&#xff1a;素材类 Bitmap&#xff1a;图片类 Canvas&#xff1a;画笔 Paint&#xff1a;画笔样式与颜色、特效的集合 近期很多网友对Android用户界面的设计表示很感…

Lnton羚通关于如何解决nanoPC-T4 upgrade报错问题?

nanoPC-T4 在 ​​# sudo apt update 和 sudo apt upgrade​​升级或安装软件 ​​sudo apt install xxx​​时遇到以下问题&#xff1a;​​Failed to set up interface with /etc/hostapd/​ Setting up hostapd (2:2.6-15ubuntu2.8) ... Job for hostapd.service failed be…

学习 Linux 系统路线图

在计算机科学领域&#xff0c;Linux 操作系统以其稳定性、灵活性和卓越性能而受到广泛欢迎。要真正掌握 Linux 系统&#xff0c;我们需要深入了解其关键组成部分&#xff0c;包括系统、内存、进程、网络和存储等模块。让我们深入探索这些模块&#xff0c;以建立起对 Linux 系统…

【轻量级神经网络】ShuffleNetv1-2详解

文章目录 1、ShuffleNetV11.1、分组卷积1.2、channel shuffle1.3、ShuffleNet基本单元1.4、整体结构 2、ShuffleNetV22.1、基本单元2.2、整体结构 1、ShuffleNetV1 1.1、分组卷积 Group convolution是将输入层的不同特征图进行分组&#xff0c;然后采用不同的卷积核再对各个组…

KVM配置使用ovs网桥

KVM配置使用ovs网桥 1、安装openvswitch 2、启动服务 3、配置ovs 重启网络服务 systemctl restart network 4、 KVM配置使用ovs网桥 配置生效&#xff1a;virsh net-define br0.xml virsh net-start bro virsh net-autostart br0 5、虚…

怎么实现技术评卷时间0投入的?(上)

01 痛苦的技术问答题评审 指针走到了九点&#xff0c;凝视着时钟的技术招聘官Jasmine从昏沉中回到现实&#xff0c;她将咖啡连同叹息一口抿了下去&#xff0c;并端正坐在电脑前。又是一天的评卷日…… 技术招聘已持续数周&#xff0c;公司筛选出了100位嵌入式工程师候选人的技…

ATA-2000系列高压放大器——应用场景介绍

ATA-2000系列高压放大器——应用场景介绍 ATA-2000系列是一款理想的可放大交、直流信号的高压放大器。最大差分输出1600Vp-p (800Vp)高压&#xff0c;可以驱动高压型负载。电压增益数控可调&#xff0c;一键保存常用设置&#xff0c;为您提供了方便简洁的操作选择&#xff0c;同…

【03 英语语法:从句(名词从句、定语从句/形容词从句、状语从句/副词从句)】

从句 从句&#xff1a;名词从句、定语从句、状语从句&#xff08;名定状名形副&#xff09;1. 名词从句&#xff08;名词&#xff09;&#xff1a;主语、宾语、表语、同位语、宾补▲名词从句的种类&#xff08;按引导词&#xff09;&#xff1a; that、whether、疑问词 句子⑴…

pycharm配置anaconda环境

前提&#xff1a; 使用anaconda已经创建了一个环境名为test&#xff0c;现在要将test环境中的python解释器作为pycharm中工程的解释器。 如何添加解释器 点击&#xff1a;File->Project->Python Interpreter->右上角Add Interpreter->Add Local Interpreter. 选…

blender 发射体粒子

发射体粒子的基础设置 选择需要添加粒子的物体&#xff0c;点击右侧粒子属性&#xff0c;在属性面板中&#xff0c;点击加号&#xff0c;物体表面会出现很多小点点&#xff0c;点击空格键&#xff0c;粒子会自动运动&#xff0c;像下雨一样&#xff1b; bender 粒子系统分为两…

UE4/UE5 “无法双击打开.uproject 点击无反应“解决

一、方法一&#xff1a;运行UnrealVersionSelector.exe 1.找到Epic Game Lancher的安装目录&#xff0c; 在lancher->Engine->Binaries->Win64->UnrealVersionSelector.exe 2.把UnrealVersionSelector.exe 分别拷贝到UE4 不同版本引擎的 Engine->Binaries->…

【Modbus通信实验二】VC++编写串口调试助手

编写串口调试助手并能在虚拟机中实现虚拟端口通信。步骤如下&#xff1a; 项目中引入Microsoft Communications Control组件&#xff0c;并编写串口初始化函数。 void CMODBUSDlg::initcomm() {//串口状态&#xff0c;避免重复打开串口CommOpenFlag FALSE;//设置串口端口号…

Maven构建工具下载与配置(图文详细)

一.下载安装 1.找到官网 2.进行下载 3.解压文件到想要的目录 二.系统配置 配置本地仓库localRepository 1.配置本地仓库位置xml 为了方便管理&#xff0c;在apache-maven-3.9.4目录下创建mvn_rep 2.找到ocalRepository标签 3.设置本地仓库路径 配置私服&#xff08;由于正常…

2023年7月京东空调行业品牌销售排行榜(京东数据运营)

上半年空调市场的热度较高&#xff0c;尽管受家电市场整体环境的影响&#xff0c;同比来看空调销量销额有一定幅度的下滑&#xff0c;但从环比来看&#xff0c;空调市场的销量销额纷纷翻倍增长。不过&#xff0c;进入7月份&#xff0c;空调市场整体就比较低迷了。 根据鲸参谋平…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的&#xff0c;千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用&#xff0c;也未验证正确性&#xff0c;实不应该。

Viobot开机指南

0.前言 本篇旨在让每个拿到Viobot设备的用户都能够第一时间测试它的效果&#xff0c;以及将设备配置到自己的环境下面。 1.上电 首先&#xff0c;我们先要把设备接上电源线和网线&#xff0c;最简单的方式就是网线直连电脑。 电源选用12V1.5A设备自带的电源即可。 2.配置网…

免费的苹果笔记本清理内存软件CleanMyMac X

苹果笔记本如何清理内存&#xff1f;CleanMyMac X给你支招。随着时间的推移&#xff0c;苹果笔记本的内存可能会变得拥挤&#xff0c;导致性能下降。不过&#xff0c;你不必担心&#xff0c;因为我们有一种解决方案&#xff0c;能够帮助你优化你的苹果笔记本的内存使用效率。Cl…

小型气象站——智能监测、多要素集成

小型气象站是一种简易的气象监测设备&#xff0c;具有智能监测、多要素集成、便于安装携带的特点&#xff0c;能够让人们随时随地获取当地的气象信息&#xff0c;接下来&#xff0c;就让我们介绍一下它的基本信息吧。 1.小型气象站的概念 小型气象站可以同时测量风速、风向、…

「Python|aiohttp|并发与协程」将HTTP请求提速成百上千倍!一次性掌握把requests请求改成协程的通用方法

本文主要介绍如何通过使用aiohttp库将同步的http请求改成异步方式请求&#xff0c;从而降低等待网络IO过程中时间和计算资源的浪费。 主要包括如何将常见的requests请求改用aiohttp异步执行以及如何将异步的批量请求方法封装成普通方法/同步调用方式&#xff0c;给业务模块调用…

Docker容器进入的4种方式(推荐最后一种)

Docker容器进入的4种方式【推荐最后一种】 在使用Docker创建了容器之后&#xff0c;大家比较关心的就是如何进入该容器了&#xff0c;其实进入Docker容器有好几多种方式&#xff0c;这里我们就讲一下常用的几种进入Docker容器的方法。 一、使用docker attach进入Docker容器二、…