技术美术百人计划学习笔记(2)--向量

1、向量的定义

向量是有方向又有大小的有向线段,向量没有位置,只有大小和方向。

2、向量的相关计算

v ⃗ = ( x , y ) \vec{v}=(x,y) v =(x,y)
2.1、标量与向量的计算
可乘除,不可加减

v ⃗ ∗ a = ( a ∗ x , a ∗ y ) \vec{v}*a=(a*x,a*y) v a=(ax,ay)

2.2、向量的模长

∣ v ∣ = x 2 + y 2 | v|=\sqrt {x^{2}+y^{2}} v=x2+y2

2.3、标准化向量
大小为1的向量

n ⃗ = v ⃗ x 2 + y 2 \vec{n}={ \vec{v}\over \sqrt {x^{2}+y^{2}}} n =x2+y2 v

2.4、向量与向量的加减计算
加减计算公式: ( x 1 , y 1 ) ± ( x 2 , y 2 ) = ( x 1 ± x 2 , y 1 ± y 2 ) (x1,y1)\pm(x2,y2)=(x1 \pm x2,y1\pm y2) (x1,y1)±(x2,y2)=(x1±x2,y1±y2)

向量相加
A B ⃗ \vec{AB} AB + B C ⃗ \vec{BC} BC = A C ⃗ \vec{AC} AC
在这里插入图片描述
向量相减
A B ⃗ \vec{AB} AB - A C ⃗ \vec{AC} AC = C B ⃗ \vec{CB} CB
在这里插入图片描述

2.5、计算两点间的距离
a ⃗ = ( x 1 , y 1 ) b ⃗ = ( x 2 , y 2 ) \vec{a}=(x1,y1) \vec{b}=(x2,y2) a =(x1,y1)b =(x2,y2)
( x 1 − x 2 ) 2 + ( y 2 − y 1 ) 2 \sqrt {(x1-x2)^{2}+(y2-y1)^{2}} (x1x2)2+(y2y1)2
a到b点的距离= ( x 1 − x 2 ) 2 + ( y 2 − y 1 ) 2 \sqrt {(x1-x2)^{2}+(y2-y1)^{2}} (x1x2)2+(y2y1)2
应用于计算一个向量到另外一个向量的距离,a到b的距离=b-a
向量的加减原则,参考链接:https://blog.csdn.net/deepdsp/article/details/19631195
在这里插入图片描述
2.6、向量的点积
结果为一个标量
a·b=|a||b|cosθ
计算公式(ax,ay).(bx,by)=(ax.bx+ay.by)
几何意义:点乘的结果描述了两个向量的相似程度,点乘结果越大夹角角度越小,两个向量越接近。

a.bθa和b
>00<=θ<90方向基本相同
=0θ=90方向垂直
<090<θ<=180方向基本相反

应用示列:兰伯特关照模型是最简单通用的模拟漫反射的光照模型
在这里插入图片描述
我看到一个博主关于兰伯特光照模型的原理写的非常清晰,浅存一下
https://gameinstitute.qq.com/community/detail/125867

自己参考网上的例子做了一个基本版的兰伯特光照模型,参考链接:
https://blog.unity.com/technology/custom-lighting-in-shader-graph-expanding-your-graphs-in-2019

https://docs.unrealengine.com/4.26/zh-CN/RenderingAndGraphics/Materials/ExpressionReference/Math/

2.7、向量的叉乘
在这里插入图片描述
几何解释:叉乘得到的向量垂直于原来的两个向量
在这里插入图片描述

向量叉乘的大小和方向

∣ a × b ∣ = ∣ a ∣ ∣ b ∣ s i n θ |a \times b|=|a||b|sin\theta a×b=a∣∣bsinθ

关于向量的方向和大小,这个博主写的非常详细和易懂,浅存一下
https://www.laowangomg.com/?p=673

最后附上一个自己写的小应用

    public Transform a;
    public Transform b;
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            Vector3 posA = a.position;
            Vector3 posB = b.position;
            float f=Vector3.Dot(a.transform.forward, posB - posA);//点乘判定是在前方还是后方
            Vector3 b3 = Vector3.Cross(a.transform.forward, posB - posA);//叉乘判定是在左边还是右边
            float f2 = Vector3.Angle(a.transform.forward, posB - posA);//得到两者间的角度 
            if (f > 0 && b3.y > 0)
            {
                Debug.Log("B球在A球右前方" + f2 + "度");
            }
            if (f > 0 && b3.y < 0)
            {
                Debug.Log("B球在A球左前侧");
            }
            if (f < 0 && b3.y > 0)
            {
                Debug.Log("B球在A球右后方");
            }
            if (f < 0 && b3.y < 0)
            {
                Debug.Log("B球在A球左后方");
            }
        }
    }

最后鼓励一下自己
无人问津也好,技不如人也罢
你都要试着安静下来,去做自己该做的事
而不是让内心烦躁,焦虑
毁掉你本来就不多的热情和定力
昨日之深渊,今日之浅谈
路虽远,行则将至
事虽难,做则可成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值