当前位置: 首页 > news >正文

【cocos creator】【TS】贝塞尔曲线,地图之间显示曲线

参考:
https://blog.csdn.net/Ctrls_/article/details/108731313
https://blog.csdn.net/qq_28299311/article/details/104009804

在这里插入图片描述

在这里插入图片描述


const { ccclass, property } = cc._decorator;@ccclass
export default class creatPoint extends cc.Component {@property(cc.Node)build: cc.Node = null;@property(cc.Node)point: cc.Node = null;@property(cc.Node)root: cc.Node = null;start() {this.init();}init(data?) {data = {mapData: [{ id: 1, name: "1", pos: { x: 0, y: 100 } },{ id: 2, name: "2", pos: { x: -100, y: -100 } },{ id: 3, name: "3", pos: { x: 200, y: -80 } },{ id: 4, name: "4", pos: { x: 180, y: 300 } },{ id: 5, name: "5", pos: { x: 150, y: 50 } }],linkData: [[2, 1], [1, 4], [1, 5], [5, 3], [2, 5]],startPosId: 2,}data.mapData.forEach(element => {this.creatOneBuild(element, data.startPosId)});data.linkData.forEach(element => {this.setPoint(cc.v2(data.mapData[element[0] - 1].pos), cc.v2(data.mapData[element[1] - 1].pos))});}creatOneBuild(data, nowId) {let build = cc.instantiate(this.build);build.parent = this.root;build.position = cc.v3(data.pos);build.getChildByName("name").getComponent(cc.Label).string = data.name;build.active = true;build.getChildByName("light").active = nowId == data.id;}creatOnePoint(pos: cc.Vec3) {let build = cc.instantiate(this.point);build.parent = this.root;build.position = pos;build.active = true;}/*** * @param startPoint 起点* @param endPoint 终点* @param pointDistance 小点间距* @param angel 弧度*/setPoint(startPoint, endPoint, pointDistance = 30, angel = 60) {let distance = startPoint.sub(endPoint).mag();let middlePoint = cc.v2((startPoint.x + endPoint.x) / 2, (startPoint.y + endPoint.y) / 2)let height = Math.sin(angel * (180 / Math.PI)) * (distance / 2) * 1.5;cc.log(height)let middlePoint2 = this.findPointCInRightTriangle(startPoint, middlePoint, height);let number = Number((distance / pointDistance).toFixed(0));let pointArr = this.getBezierPoints(number, startPoint, height ? middlePoint2 : middlePoint, endPoint)pointArr.forEach(element => {this.creatOnePoint(element)console.log(element);//每个小圆点点坐标,这里进行处理});}getAngle(y1, x1, y2, x2) {const radians = Math.atan2(y2 - y1, x2 - x1);const degrees = radians * (180 / Math.PI);return degrees;}findPointCInRightTriangle(startPoint: cc.Vec2, endPoint: cc.Vec2, bcLength: number): cc.Vec2 | null {let ax = endPoint.x;let ay = endPoint.y;let bx = startPoint.x;let by = startPoint.y;// 计算向量AB  const dx = bx - ax;const dy = by - ay;// 计算AB的长度  const abLength = Math.sqrt(dx * dx + dy * dy);// 检查AB长度是否为零,以避免除以零的错误  if (abLength === 0) {return null; // 无法确定C点位置,因为AB长度为0  }// 计算AC的长度(利用勾股定理)  const acLength = Math.sqrt(bcLength * bcLength - abLength * abLength);// 计算向量AB的单位向量  const abUnitX = dx / abLength;const abUnitY = dy / abLength;// 计算向量AC,它垂直于向量AB(因为ABC是直角三角形)  const acUnitX = -abUnitY; // 垂直向量的x分量是原向量y分量的相反数  const acUnitY = abUnitX;  // 垂直向量的y分量是原向量x分量  // 计算点C的坐标  const cx = ax - acLength * acUnitX;const cy = ay - acLength * acUnitY;return cc.v2(cx, cy);}/*** * @param {返回的点的数组长度} num * @param {起点} point1 * @param {控制点} point2 * @param {终点} point3 */getBezierPoints(num, point1, point2, point3) {let pointList = [];let x1 = point1.x, y1 = point1.y;let x2 = point3.x, y2 = point3.y;let cx = point2.x, cy = point2.y;let t = 0;for (let i = 1; i < (num + 1); i++) {//用i当作t,算出点坐标,放入数组t = i / num;let x = Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * cx + Math.pow(t, 2) * x2;let y = Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * cy + Math.pow(t, 2) * y2;pointList.push(cc.v2(x, y))}return pointList;}// update (dt) {}
}

相关文章:

【cocos creator】【TS】贝塞尔曲线,地图之间显示曲线

参考&#xff1a; https://blog.csdn.net/Ctrls_/article/details/108731313 https://blog.csdn.net/qq_28299311/article/details/104009804 const { ccclass, property } cc._decorator;ccclass export default class creatPoint extends cc.Component {property(cc.Node)bu…...

COMFYUI换脸ReActor报错Value not in list: face_restore_model: ‘codeformer.pth‘解决

Value not in list: face_restore_model: codeformer.pth not in [none, GFPGANv1.3.pth] 搜了下没找到答案&#xff0c;最后看github官方的指引&#xff1a; You can download models here: https://huggingface.co/datasets/Gourieff/ReActor/tree/main/models/facerestore…...

深入理解Java中的字段与属性的区别

1、Java中的属性和字段有什么区别&#xff1f; 答&#xff1a;Java中的属性(property)&#xff0c;通常可以理解为get和set方法。 而字段(field)&#xff0c;通常叫做“类成员”&#xff0c;或 "类成员变量”&#xff0c;有时也叫“域”&#xff0c;理解为“数据成员”&…...

【Locust分布式压力测试】

Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…...

富格林:出金异常警惕黑幕陷阱受骗

富格林悉知&#xff0c;在做单出金时落入黑幕陷阱亏损后&#xff0c;需尽快发现和总结错误&#xff0c;用心筹维权谋安全出金盈利方法并追回亏损。因为黄金市场优势众多&#xff0c;众多的投资者进入市场投资&#xff0c;但因为经验不足&#xff0c;在面对黑幕陷阱是获取无法及…...

Docker - Nginx

博文目录 文章目录 说明命令 说明 Docker Hub Nginx 数据卷数据卷印射在容器内的路径nginx.conf/etc/nginxnginx.html/usr/share/nginx/htmlnginx.log/var/log/nginx 容器内的路径说明/etc/nginx/nginx.conf配置文件/etc/nginx/conf.d配置目录/usr/share/nginx/html静态目录/…...

免费搭建幻兽帕鲁服务器(Palworld免费开服教程)

随着互联网技术的不断发展和普及&#xff0c;网络游戏已经成为了人们休闲娱乐的重要方式之一。而在众多网络游戏中&#xff0c;幻兽帕鲁以其独特的游戏设定和玩法&#xff0c;吸引了大量玩家的关注。为了满足广大玩家的需求&#xff0c;本文将介绍如何免费搭建幻兽帕鲁服务器&a…...

作业习题

实验代码&#xff1a; import java.util.Scanner;class chazhao {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入你要的数组");String line sc.nextLine();String[] lineArrline.split(" ");int[…...

解决unbuntu更新到23.10 mantic firefox无法使用的问题

产看历史版本号&#xff1a; 升级到最新版本后查看&#xff1a; roottesthost01:/home/test/Desktop# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 23.10 Release: 23.10 Codename: mantic 打开firefox发现图标找…...

idea常用配置——注释快捷键

1、单行注释&#xff1a;使用 Ctrl / 可以添加或删除当前行的注释。如果你想要给某一行添加注释&#xff0c;只需要将光标放在那一行&#xff0c;然后按下 Ctrl / 即可。如果你想要删除那一行的注释&#xff0c;同样只需要将光标放在那一行&#xff0c;然后再次按下 Ctrl /。…...

Hidl 学习总结 2

1、Android apk 调用Hidl处理 app添加对应的hidl jar包 2、MainActivity 添加如下代码 package com.example.test2;import androidx.appcompat.app.AppCompatActivity; import vendor.hardware.test.V1_0.ITest; import vendor.hardware.test.V1_0.ITestCmdCallback; import …...

深度学习学习日记4.7

1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测&#xff0c; 反向传播进行训练(每一个参数通过梯度下降进行更新参数)&#xff0c;(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数&#xff0c;就是更好的参数。 损失…...

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算&#xff0c;今年清明节假期3天全国国内旅游出游1.19亿人次&#xff0c;按可比口径较2019年同期增长11.5%&#xff1b;国内游客出游花费539.5亿元&#xff0c;较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…...

自动驾驶中的交通标志识别原理及应用

自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验&#xff1a;链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路&#xff0c;以促进道路行车安全&#xff0c;而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…...

数据挖掘入门项目二手交易车价格预测之建模调参

文章目录 目标步骤1. 调整数据类型&#xff0c;减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参&#xff08;1&#xff09; 贪心调参&#xff08;2&#xff09;…...

【Java】Java使用Swing实现一个模拟计算器(有源码)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 今天翻了翻之前写的代码&#xff0c;发现自己之前还写了一个计算器&#xff0c;今天把我之前写的代码分享出来。 我记得那会儿刚学不会写&#xff0c;写的乱七八糟&#xff0c;但拿来当期末作业还是不错的哈哈。 直接上…...

MC9S12DJ64微控制器

这份文件是关于Freescale的MC9S12DJ64微控制器的用户指南&#xff0c;包含了关于该设备的详细信息和使用说明。以下是核心内容的整理&#xff1a; 产品信息: 产品信息详细描述如下&#xff1a; 1. **产品名称**:- MC9S12DJ64微控制器单元&#xff08;MCU&#xff09;2. **核心…...

小程序打开空白的问题处理

小程序打开是空白的&#xff0c;如下&#xff1a; 这个问题都是请求域名的问题&#xff1a; 一、检查服务器域名配置了 https没有&#xff0c;如果没有&#xff0c;解决办法是申请个ssl证书&#xff0c;具体看这里 https://doc.crmeb.com/mer/mer2/4257 二、完成第一步后&#…...

langchain + azure chatgpt组合配置并运行

首先默认你已经有了azure的账号。 最重要的是选择gpt-35-turbo-instruct模型、api_version&#xff1a;2023-05-15&#xff0c;就这两个参数谷歌我尝试了很久才成功。 我们打开https://portal.azure.com/#home&#xff0c;点击更多服务&#xff1a; 我们点击Azure OpenAI&#…...

【JVM性能调优】- GC调优实操思路

1、GC调优实操思路 前面几点所提及的都是GC调优的一些方法论以及衡量指标&#xff0c;但在真正需要处理GC调优时&#xff0c;上面几点只能给你提供辅导&#xff0c;并不能建立完善的调优思路&#xff0c;因此&#xff0c;接下来再一同论述GC调优的具体实操思想。 GC调优时&…...

四川教育装备行业协会考察团走访云轴科技ZStack共话技术创新应用

近日&#xff0c;四川省教育装备行业协会高等教育技术专业委员会组织了一次深入的考察活动&#xff0c;旨在加强与其他省市高校及企业之间的交流与合作&#xff0c;学习借鉴先进的教育装备与管理经验&#xff0c;以提升本省的高等教育技术水平。考察团一行先后走访了武汉理工大…...

KIVY 学习1

环境 python 3.6 3.7 对应Kivy 1.11.1版本各依赖 python -m pip install docutils pygments pypiwin32 kivy_deps.sdl20.1.22 kivy_deps.glew0.1.12 这是一个用于安装Python包的命令&#xff0c;它会安装一些特定的包。具体来说&#xff0c;这个命令会安装以下包&#xff1a; …...

在Go语言中使用select和channel来期待确定性行为

Go开发人员在使用channel时常犯的一个错误是,对select在多个channel中的行为方式做出错误的假设。错误的假设可能会导致难以识别和重现的细微错误。假设我们要实现一个需要从两个channel接收消息的goroutine: 我们可能会决定像下面这样处理优先级: for {select {case v := &…...

【MATLAB源码-第19期】matlab基于导频的OFDM系统瑞利信道rayleigh的信道估计仿真,输出估计与未估计误码率对比图。

1、算法描述 正交频分复用&#xff08;英语&#xff1a;Orthogonal frequency-division multiplexing, OFDM&#xff09;有时又称为分离复频调制技术&#xff08;英语&#xff1a;discrete multitone modulation, DMT&#xff09;&#xff0c;可以视为多载波传输的一个特例&am…...

坚持十天做完Python入门编程100题第三天加班

坚持十天做完Python入门编程100题第三天加班 第24题 扫描文件列表第25题 如何将字典转换成JSON并写入json文件&#xff1f;第26题 JSON转换成字典 第24题 扫描文件列表 如何扫描当前目录下的文件列表&#xff1f;解析&#xff1a;可以使用python内置的glob模块&#xff0c;用法…...

MSOLSpray:一款针对微软在线账号(AzureO365)的密码喷射与安全测试工具

关于MSOLSpray MSOLSpray是一款针对微软在线账号&#xff08;Azure/O365&#xff09;的密码喷射与安全测试工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以直接对目标账户执行安全检测。支持检测的内容包括目标账号凭证是否有效、账号是否启用了MFA、租户账号是…...

uos安装lxml避坑记录

环境&#xff1a;紫光电脑uos系统 python&#xff1a;系统自带3.7.3 条件&#xff1a;已打开开发者模式&#xff0c;可以自行安装应用商店之外的软件 一、pip3 install lxml4.8.0可以正正常下载&#xff0c;但出现如下错误 另&#xff1a;为什么是4.8.0&#xff1f;因为这个…...

518. 零钱兑换 II(力扣LeetCode)

文章目录 518. 零钱兑换 II题目描述动态规划一维数组为什么不能交换两个for循环的顺序&#xff1f; 二维数组 518. 零钱兑换 II 题目描述 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数…...

01串的熵(蓝桥杯)

文章目录 01串的熵问题描述答案&#xff1a;11027421题意解释暴力枚举 01串的熵 问题描述 对于一个长度为n的01串 S x 1 x 2 x 3 x_{1}x_{2}x_{3} x1​x2​x3​… x n x_{n} xn​&#xff0c;香农信息熵的定义为 H(S) − ∑ 1 n p ( x i ) l o g 2 ( p ( x i ) ) -\sum _{1…...

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型&#xff0c;包括整型&#xff08;如i32、u32&#xff09;、浮点型&#xff08;如f32、f64&#xff09;、布尔类型&#xff08;bool&#xff09;和字符类型&#xff08;char&#xff09;。此外&#xff0c;Rust还提供了原生数组、元组…...