| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 【Unity记录】【解析几何】令文本保持字符间距地环绕在圆弧上(将线段映射到圆弧上) -> 正文阅读 |
|
[游戏开发]【Unity记录】【解析几何】令文本保持字符间距地环绕在圆弧上(将线段映射到圆弧上) |
本文内容阅读须知:
本文将介绍:
最终效果有时我们需要将文字环绕在圆弧上,比如你的美术突然给了你这么一个素材: 可以看到,无论是中文字符还是英文字符,都保留了其原有的字符间距,并环绕在圆弧上
建议使用的情况: 实现方法现有做法TextMeshPro Sample Scene 25最开始肯定不愿意自己写,上网找现成的脚本。 建议使用的情况:
CurvedTextMeshPro这是由TonyViT编写的脚本
本文做法说白了就是想要保持字符本身的间距。以该角度入手,事实上相当于把线段沿圆弧附着。(想象一下胶带依附于中心轮的关系) 均匀地映射肯定是最好,但本人才疏学浅,暂时没找到完全均匀映射的数学做法,只找到了一个在一定范围内可接受的方法。 线段圆弧映射该做法利用复变函数
w
=
1
/
z
w=1/z
w=1/z将直线上的点映射到圆上。 问题描述I’m looking for a mapping
f
:
R
2
→
R
2
f: \mathbb{R}^2 \rightarrow \mathbb{R}^2
f:R2→R2 that converts a line segment
A
A
′
A A^{\prime}
AA′ with two end points
A
=
(
x
A
,
y
A
)
A=\left(x_A, y_A\right)
A=(xA?,yA?) and
A
=
(
x
A
′
,
y
A
′
)
A=\left(x_{A^{\prime}}, y_{A^{\prime}}\right)
A=(xA′?,yA′?) to an
arc
?
B
B
′
\operatorname{arc} B B^{\prime}
arcBB′ with radius
r
r
r centered at
O
O
O, with end points
B
=
(
x
B
,
y
B
)
B=\left(x_B, y_B\right)
B=(xB?,yB?) and
B
′
=
(
x
B
′
,
y
B
′
)
B^{\prime}=\left(x_{B^{\prime}}, y_{B^{\prime}}\right)
B′=(xB′?,yB′?). This mapping should map A A A to B B B and A ′ A^{\prime} A′ to B ′ B^{\prime} B′. Does anyone know a closed-form relation for such mapping? I know that mappings such as w = 1 / z w=1 / z w=1/z in complex plain can convert lines to circles. But I don’t know how to modify this to convert a particular line segment to an arc given the endpoints and radius. 解决方案Treat everything as complex numbers, let
P
P
P be a point on the line segment
A
A
′
A A^{\prime}
AA′. The map sends the line segment
A
A
′
A A^{\prime}
AA′ to the line segment joining
?
1
2
-\frac{1}{2}
?21? to
1
2
\frac{1}{2}
21?. Multiply
B
′
?
B
B^{\prime}-B
B′?B will rotate and scale the line segment to a parallel copy of
B
B
′
B B^{\prime}
BB′. After another translation, the map To send line segment
B
B
′
B B^{\prime}
BB′ to an arc joining them, you first figure out the mid point
M
M
M of the circular arc
B
B
′
B B^{\prime}
BB′ and let
N
=
2
O
?
M
N=2 O-M
N=2O?M be the antipodal point of
M
M
M on the circle holding the arc. Matlab实现作为一个码农我唯一能做的就是测试一下顶不顶真了。
寻找与线段等长的圆弧给定圆心、弧中点和线段长度就可以计算出半径及应向两端延伸的距离。进而利用坐标关系求出弧的两端点: C#代码
线段圆弧映射(C#实现)
该脚本的另一个构造函数还支持指定弧上两端点进行映射。
Unity中实现TextMeshPro文字弯曲
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/17 3:40:18- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |