Unity 圆角 线段 绘制 LineRender

需求 绘制圆角

核心函数

     /// <summary>/// 点ABC 形成的角度必须为90° 点c为中间的点/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>/// <param name="radius">圆角半径,不可为负数</param>/// <param name="count">圆角数量,越多则越圆滑</param>/// <returns></returns>public static Vector3[] Rounded(Vector3 a, Vector3 b, Vector3 c, float radius, int count){Vector3 ca = (a - c).normalized;Vector3 cb = (b - c).normalized;Vector3 d = c + ca * radius + cb * radius;Vector3 a1 = c + ca * radius;Vector3 b1 = c + cb * radius;Vector3 db1 = (b1 - d).normalized;Vector3 cross = Vector3.Cross(ca, cb);List<Vector3> points = new List<Vector3>();points.Add(b);for (int i = 0; i <= count; i++){Vector3 p = d + Quaternion.AngleAxis((float)i / (float)count * 90, cross) * db1 * radius;points.Add(p);}points.Add(a);return points.ToArray();}

测试代码

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class Test : MonoBehaviour
{public float Radius = 1;public int Count = 25;void Start(){}// Update is called once per framevoid Update(){}private void OnDrawGizmos(){Vector3[] v = Rounded(Vector3.up * 2, Vector3.right * 2, Vector3.zero, Radius, Count);for (int i = 0; i < v.Length - 1; i++){Gizmos.DrawLine(v[i], v[i + 1]);Gizmos.DrawSphere(v[i], 0.01f);}}/// <summary>/// 点ABC 形成的角度必须为90° 点c为中间的点/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>/// <param name="radius">圆角半径,不可为负数</param>/// <param name="count">圆角数量,越多则越圆滑</param>/// <returns></returns>public static Vector3[] Rounded(Vector3 a, Vector3 b, Vector3 c, float radius, int count){Vector3 ca = (a - c).normalized;Vector3 cb = (b - c).normalized;Vector3 d = c + ca * radius + cb * radius;Vector3 a1 = c + ca * radius;Vector3 b1 = c + cb * radius;Vector3 db1 = (b1 - d).normalized;Vector3 cross = Vector3.Cross(ca, cb);List<Vector3> points = new List<Vector3>();points.Add(b);for (int i = 0; i <= count; i++){Vector3 p = d + Quaternion.AngleAxis((float)i / (float)count * 90, cross) * db1 * radius;points.Add(p);}points.Add(a);return points.ToArray();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【金猿人物展】东方金信董事长兼总经理王伟哲:价值化、智能化驱动下的大数据,治理仍需深化...

‍ 王伟哲 本文由东方金信董事长兼总经理王伟哲撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度趋势人物榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 2023年&#xff0c;数据要素、公共数据授权运营成为热点话题&#xff0c;也是激活数据…

stm32学习笔记:TIIM-输入捕获

输入捕获理论 4个输入捕获和输出比较通道&#xff0c;共用4个CCR寄存器 另外它们的CH1到CH4&#xff0c;4个通道的引脚&#xff0c;也是共用的。 所以对于同一个定时器&#xff0c;输入捕获和输出比较只能使用其中一个&#xff0c;不能同时使用。 电平跳变&#xff1a;上升沿…

个人调用OCR

一、自己训练模型 二、调用现成API 此处介绍百度智能云API&#xff0c;因为有免费次数。&#xff08;原来一些网址在百度不是默认显示网址的&#xff0c;而是自己的网站名字&#xff09; 首页找到OCR 每个人每月能用1K次。&#xff08;有详细的API文档说明&#xff0c;不过跟…

在Uniapp中使用Echarts创建可视化图表

在uniapp中可以引入echarts创建数据可视化图表。 1. 安装Echarts 使用npm安装echarts插件&#xff0c;命令如下&#xff1a; npm install echarts --save2. 引入Eharts 在需要使用Echarts的页面引入&#xff1a; import *as echarts from echarts3. 创建实例 创建画布元素…

【产品应用】一体化伺服电机在管道检测机器人中的应用

一体化伺服电机在管道检测机器人的应用正日益受到关注。管道检测机器人是一种能够在管道内部进行检测和维护的智能化设备&#xff0c;它可以检测管道的内部结构、泄漏、腐蚀等问题&#xff0c;以确保管道的安全和稳定运行。而一体化伺服电机作为机器人的动力源&#xff0c;对于…

【AI视野·今日CV 计算机视觉论文速览 第281期】Tue, 2 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 2 Jan 2024 Totally 95 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Refining Pre-Trained Motion Models Authors Xinglong Sun, Adam W. Harley, Leonidas J. Guibas考虑到在视频中手动注释运…

在vue3中使用Cesium保姆篇

1.首先新建一个vue项目 Vue.js - 渐进式 JavaScript 框架 | Vue.js 可以直接到管网中查看命令通过npm来创建一个vue3的项目 然后通过命令下载1.99的版本的cesium和plugin npm i cesium1.99 vite-plugin-cesium 下载完了以后 2.引入cesium 首先找到vue的vite.config.js …

C# OpenCvSharp DNN FreeYOLO 目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN FreeYOLO 目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;input tensor&#xff1a;Float[1, 3, 192, 320] --------------------------------------------------------------- Outp…

【力扣每日一题】1944队列中可以看到的人数

目录 题目来源 题目描述 示例 提示&#xff1a; 思路分析 总结 代码实现 java实现 c实现 得分情况 java c p.s.吐槽一点无足轻重的事情 题目来源 力扣1944队列中可以看到的人数 题目描述 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以…

综合医院信息系统源码,HIS源码,(HIS+LIS+电子病历系统)正版授权,可商用

基层医院云HIS系统源码&#xff0c;二级综合医院信息系统源码&#xff0c;HIS源码&#xff0c;正版授权&#xff0c;可项目使用 一、云HIS系统介绍&#xff1a; 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、…

大师学SwiftUI第6章 - 声明式用户界面 Part 1

状态 在上一章&#xff0c;我们介绍了SwiftUI的主要特性&#xff0c;声明式语法。借助SwiftUI&#xff0c;我们可以按希望在屏幕上显示的方式声明视图&#xff0c;余下交由系统来创建所需的代码。但声明式语法不只用于组织视图&#xff0c;还可在应用状态发生变化时更新视图。…

南金研小巧的CAN总线记录仪在冬测中的使用

南金研小巧的CAN总线记录仪在冬测中的使用&#xff1a; 在这里插入图片描述 1.确定需求&#xff1a;在开始使用前&#xff0c;需要明确冬测的具体需求&#xff0c;例如需要记录的CAN总线数据类型、采样率、存储容量等。 2.连接硬件&#xff1a;将小巧的CAN总线记录仪与需要进行…