Unity 面试篇|(八)Unity机试篇 【全面总结 | 持续更新】

目录

    • 1.假设当前市场价一只鸡10元,一只鸭12元5角。请写一个函数ShowPrice,输入参数分别为鸡和鸭的个数(非负整型),功能为显示出总价钱,精确到分。例如调用ShowPrice(5,10)后输出175.00。请注意程序的可读性和易于维护性。
    • 2.判断点与线的位置关系
    • 3.计算点在直线上的投影(向量投影)
    • 4.判断多边形是否为凸多边形
    • 5.判断线段与线段是否共线
    • 6.判断线段与线段是否重合(非相交)
    • 7.线段与线段是否相交
    • 8.计算直线与直线的交点
    • 9.射线与线段是否相交,以及交点
    • 10.点围绕另一点旋转指定角度
    • 11.点是否在任意多变内
    • 12.写一个计时器工具,从整点开始计时,格式为:00:00:00
    • 13.用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放
    • 14.写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。
    • 15.3D空间有三个cube当做点,有一条鱼的模型,要求在三点之间游动,要
    • 16.设计一款计时器(Timer)功能,拥有基础事件:开始计时、暂停计时,停止计时【计时器事件】

1.假设当前市场价一只鸡10元,一只鸭12元5角。请写一个函数ShowPrice,输入参数分别为鸡和鸭的个数(非负整型),功能为显示出总价钱,精确到分。例如调用ShowPrice(5,10)后输出175.00。请注意程序的可读性和易于维护性。

static void ShowPrice(int num_chicken, int num_duck) {
float totalPrice = 0.00f;
float price_chicken = 10f;
float price_duck = 12.5f;
totalPrice = num_chicken * price_chicken + num_duck * price_duck;
Console.WriteLine(“总价钱为:{0:0.00}”, totalPrice);
}

2.判断点与线的位置关系

已知点P(x,y),与直线上A(x1,y1),B(x2,y2)两点,通过向量AP与BP的叉乘返回的结果,即可确定点在直线的位置关系。
判断依据:1)等于0:点在直线上;2)小于0:点在直线的左侧;3)大于0:点在直线的右侧

 /// <summary>/// 2D叉乘/// </summary>public static float CrossProduct2D(Vector2 v1, Vector2 v2){//叉乘运算公式 x1*y2 - x2*y1return v1.x * v2.y - v2.x * v1.y;}/// <summary>/// 点与线的位置关系/// </summary>/// <returns>==0:点在线上 <0:点在线的左侧 >0:点在线的右侧</returns>public static int IsPointToLinePosition(Vector2 point, Vector2 lineStart, Vector2 lineEnd){float crossValue = CrossProduct2D(point - lineStart, lineEnd - lineStart);if (crossValue < 0) return -1;if (crossValue > 0) return 1;return 0;}

3.计算点在直线上的投影(向量投影)

已知点P(x,y),与直线上两点A(x1,y1),B(x2,2),求P点在直线AB上的投影
知识点:通过向量投影公式(点乘),即可获得点P在直线AB投影点。

    /// <summary>/// 2D叉乘/// </summary>public static float CrossProduct2D(Vector2 v1, Vector2 v2){//叉乘运算公式 x1*y2 - x2*y1return v1.x * v2.y - v2.x * v1.y;}/// <summary>/// 点是否在直线上/// </summary>public static bool IsPointOnLine(Vector2 point, Vector2 lineStart, Vector2 lineEnd){float value = CrossProduct2D(point - lineStart, lineEnd - lineStart);return Mathf.Abs(value) < 0.0003 /* 使用 Mathf.Approximately(value,0) 方式,在斜线上好像无法趋近为0*/;}/// <summary>/// 点到直线上的投影坐标/// </summary>public static Vector2 Point2LineProject(Vector2 point, Vector2 lineStart, Vector2 lineEnd){if (IsPointOnLine(point, lineStart, lineEnd))return point;Vector2 v = point - lineStart;Vector2 u = lineEnd - lineStart;//求出长度float u1Length = Vector2.Dot(u, v) / u.magnitude;return u1Length * u.normalized + lineStart;}

4.判断多边形是否为凸多边形

已知多边形的逆时针顶点序列,依次判断相邻两个线段走向是否一致即可。
(点与线段位置关系,因为规定为逆时针顶点序列,所以只要两个相邻线段的叉乘都小于0则该多边形为凸多边形)

   /// <summary>/// 2D叉乘/// </summary>public static float CrossProduct2D(Vector2 v1, Vector2 v2){//叉乘运算公式 x1*y2 - x2*y1return v1.x * v2.y - v2.x * v1.y;}/// <summary>/// 点与线的位置关系/// </summary>/// <returns>==0:点在线上 <0:点在线的左侧 >0:点在线的右侧</returns>public static int IsPointToLinePosition(Vector2 point, Vector2 lineStart, Vector2 lineEnd){float crossValue = CrossProduct2D(point - lineStart, lineEnd - lineStart);if (crossValue < 0) return -1;if (crossValue > 0) return 1;return 0;}/// <summary>/// 是否为凸多边形/// </summary>/// <param name="points">逆时针点序列</param>public static bool IsConvexPolygon(List<Vector2> points){//计算每个顶点的转向,如果有不一致的转向,则表示该多边形不是凸多边形if (points.Count < 3) return false;bool isConvex = true;for (int i = 1; i < points.Count; i++){Vector2 point = points[i];//上一个点Vector2 point1 = points[i - 1];//下一个点,如果超出当前点集合,则需要获取第一个点int nextIndex = i + 1;if (nextIndex >= points.Count) nextIndex = 0;Vector2 point2 = points[nextIndex];//计算朝向,因为点集合为逆时针点序列,如果点在线段右侧,则表示该角大于180 该多边形为凹多边形float value = IsPointToLinePosition(point1, point, point2);if (value > 0){isConvex = false;break;}}return isConvex;}

5.判断线段与线段是否共线

思路:
1)先判断两条线段是否平行,即两条线段的叉积等于0
2)在判断两条线段是否共线,即线段1一个点在线段2的延长线上

  /// <summary>/// 线段与线段是否共线/// </summary>public static bool IsSegmentCollineation(Vector2 segment1Start, Vector2 segment1End, Vector2 segment2Start,Vector2 segment2End){//1.判断两个向量是否平行float value = CrossProduct2D(segment1End - segment1Start, segment2End - segment2Start);if (Mathf.Abs(value) < 0.0003f){// 平行,则判断一个线上的点是否在另一线上if (IsPointOnLine(segment2Start, segment2End, segment2Start))return true;}return false;}

6.判断线段与线段是否重合(非相交)

1)判断两条线段必须共线
2)然后片段判断线段A的起终点是否在线段B,以及线段B的起终点,是否在线段A上,只要有一个条件成立,则可以认为两条线段是重合的

1)判断两条线段是否共线
2)对两条线段的4个定点进行排序,如果1,3 或 1,4 为为同一条线段上的点,则可以任务两条线段是否重合的

 /// <summary>/// 线段与线段是否重合(全部重合或局部重合)/// </summary>public static bool IsSegmentCoincide(Vector2 segment1Start, Vector2 segment1End, Vector2 segment2Start,Vector2 segment2End){//先判断两条线段是否在同一条线上if (!IsSegmentCollineation(segment1Start, segment1End, segment2Start, segment2End))return false;//如果是相同的起终点if (segment1Start == segment2Start && segment1End == segment2End) return true;//判断检测点是否在另一条线段上if (IsPointOnSegment2(segment1Start, segment2Start, segment2End) ||IsPointOnSegment2(segment1End, segment2Start, segment2End) ||IsPointOnSegment2(segment2Start, segment1Start, segment1End) ||IsPointOnSegment2(segment2End, segment1Start, segment1End))return true;return false;}

7.线段与线段是否相交

    /// <summary>/// 线段是否相交/// </summary>public static bool IsSegmentIntersect(Vector2 segment1Start, Vector2 segment1End, Vector2 segment2Start,Vector2 segment2End){//快速排斥实验if (Mathf.Min(segment1Start.x, segment1End.x) <= Mathf.Max(segment2Start.x, segment2End.x)&& Mathf.Min(segment2Start.x, segment2End.x) <= Mathf.Max(segment2Start.x, segment2End.x)&& Mathf.Min(segment1Start.y, segment1End.y) <= Mathf.Max(segment2Start.y, segment2End.y)&& Mathf.Min(segment2Start.y, segment2End.y) <= Mathf.Max(segment1Start.y, segment1End.y)){//先判断线段是否重合,重合,则认为也是相交if (IsSegmentCoincide(segment1Start, segment1End, segment2Start, segment2End))return true;//互为跨立的判断 一线的点相对另一线的位置关系,左右 -1 1,之和为 0int state = IsPointToLinePosition(segment1Start, segment2Start, segment2End) +IsPointToLinePosition(segment1End, segment2Start, segment2End) +IsPointToLinePosition(segment2Start, segment1Start, segment1End) +IsPointToLinePosition(segment2End, segment1Start, segment1End);if (state == 0) return true;}return false;}

8.计算直线与直线的交点

   /// <summary>/// 求直线的交点/// </summary>public static Vector2 LineIntersectPoint(Vector2 line1Start, Vector2 line1End, Vector2 line2Start,Vector2 line2End){//两点式公式//x0 = ((x3-x4) * (x2*y1 - x1*y2) - (x1-x2) * (x4*y3 - x3*y4)) / ((x3-x4) * (y1-y2) - (x1-x2) * (y3-y4));//y0 = ((y3-y4) * (y2*x1 - y1*x2) - (y1-y2) * (y4*x3 - y3*x4)) / ((y3-y4) * (x1-x2) - (y1-y2) * (x3-x4));float x1 = line1Start.x, x2 = line1End.x, x3 = line2Start.x, x4 = line2End.x;float y1 = line1Start.y, y2 = line1End.y, y3 = line2Start.y, y4 = line2End.y;Vector2 point = Vector2.zero;point.x = ((x3 - x4) * (x2 * y1 - x1 * y2) - (x1 - x2) * (x4 * y3 - x3 * y4)) / ((x3 - x4) * (y1 - y2) - (x1 - x2) * (y3 - y4));point.y = ((y3 - y4) * (y2 * x1 - y1 * x2) - (y1 - y2) * (y4 * x3 - y3 * x4)) / ((y3 - y4) * (x1 - x2) - (y1 - y2) * (x3 - x4));return point;}

9.射线与线段是否相交,以及交点

  • 所在直线是否相交
  • 点是否在射线以及直线上
   /// <summary>/// 射线与线段是否相交/// </summary>public static bool IsRaySegmentIntersect(Vector2 rayStart, Vector2 rayDir, Vector2 segmentStart, Vector2 segmentEnd, out Vector2 point){//先计算两条直线是否相交if (!LineIntersectPoint(rayStart, rayStart + rayDir * 1, segmentStart, segmentEnd, out point))return false;//判断交点的位置是否在射线上 方向相同可以确定点在射线上if (Vector2.Dot((point - rayStart).normalized, rayDir.normalized) < 0) return false;//点是否在线段上if (!IsPointOnSegment2(point, segmentStart, segmentEnd)) return false;return true;}

10.点围绕另一点旋转指定角度

   /// <summary>/// 点绕另一个点进行旋转/// </summary>public static Vector2 PointRoationOnPoint(Vector2 originPoint, Vector2 point, float angle){if (originPoint == point) return originPoint;Vector2 resultPoint = Vector2.zero;Vector2 v = (point - originPoint).normalized;angle *= Mathf.Deg2Rad;resultPoint.x = v.x * Mathf.Cos(angle) - v.y * Mathf.Sin(angle);resultPoint.y = v.x * Mathf.Sin(angle) + v.y * Mathf.Cos(angle);return resultPoint * Vector2.Distance(originPoint, point) + originPoint;}/// <summary>/// 点集合绕点旋转/// </summary>public static List<Vector2> PointsRoationOnPoint(List<Vector2> points, Vector2 point, float angle){List<Vector2> resultPoints = new List<Vector2>();if (points == null) return resultPoints;for (int i = 0; i < points.Count; i++){Vector2 nPoint = PointRoationOnPoint(point, points[i], angle);resultPoints.Add(nPoint);}return resultPoints;}

11.点是否在任意多变内

  • 射线法:
    • 求出多边形所在矩形,判断点是否在矩形内
    • 点是否在多边形顶点或边上
    • 以当前点做一条水平射线,计算该射线与多边形线段的相交数量,如果为奇数则点在多边形内部
 /// <summary>/// 点是否在任意多边形内部/// </summary>/// <returns>-1:不在多边形内 0:在多边形上 1:多边形内 </returns>public static int IsPointInAnyPolygon(Vector2 point, List<Vector2> polygon){//顶点数量小于3,则无法形成多边形if (polygon.Count < 3) return -1;//1.先获取多边形所在矩形范围内Vector2 rectMin = polygon[0], rectMax = polygon[0];for (int i = 1; i < polygon.Count; i++){if (polygon[i].x < rectMin.x) rectMin.x = polygon[i].x;if (polygon[i].y < rectMin.y) rectMin.y = polygon[i].y;if (polygon[i].x > rectMax.x) rectMax.x = polygon[i].x;if (polygon[i].y > rectMax.y) rectMax.y = polygon[i].y;}if (point.x < rectMin.x || point.y < rectMin.y || point.x > rectMax.x || point.y > rectMax.y) return -1;//2.射线相交点计算int intersectCount = 0;for (int i = 0; i < polygon.Count; i++){int nextIndex = i + 1;if (nextIndex >= polygon.Count)nextIndex = 0;//目标在顶点上if (polygon[i] == point || polygon[nextIndex] == point)return 0;//目标在线段上if (IsPointOnSegment2(point, polygon[i], polygon[nextIndex]))return 0;Vector2 intersectPoint;//射线与线段相交if (IsRaySegmentIntersect(point, Vector2.right, polygon[i], polygon[nextIndex], out intersectPoint)){//如果相交为线段的顶点,则需要增加2,因为在同一点进入,又在同一个点出去if (intersectPoint == polygon[i] || intersectPoint == polygon[nextIndex])intersectCount += 2;elseintersectCount += 1;}}return intersectCount % 2 == 1 ? 1 : -1;}

12.写一个计时器工具,从整点开始计时,格式为:00:00:00

  • 挂在随便一个text物体上
  • 空格暂停与开始;小键盘0清零
   public class Timer: MonoBehaviour{private float timer = 0f;private int h = 0;private int m = 0;private int s = 0;private string timeStr = string.Empty;Text time_text;bool pause = true;private void Start(){time_text = gameObject.GetComponent<Text>();}void Update(){if (Input.GetKeyDown(KeyCode.Space)){pause = !pause;}timer += Time.deltaTime;if (!pause){if (timer >= 1f){s++;timer = 0;}if (s >= 60){m++;s = 0;}if (m >= 60){h++;m = 0;}if (h >= 99){h = 0;}}if (Input.GetKeyDown(KeyCode.Keypad0)){s = 0; m = 0; h = 0;}timeStr = string.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);time_text.text = timeStr;}}

13.用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放

  • 鼠标拖拽,注:被拖拽物体不能与场景内其他物体在default layer上
    public class DragObj : MonoBehaviour{private void OnMouseEnter(){gameObject.transform.localScale += new Vector3(0.1f, 0.1f, 0.1f);}private void OnMouseExit(){gameObject.transform.localScale -= new Vector3(0.1f, 0.1f, 0.1f);}private void OnMouseDrag(){Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition);//从屏幕鼠标点击的位置向场景内发出一条射线RaycastHit floorHit;if (Physics.Raycast(camRay, out floorHit, 1000f, 1))//1为过滤层{transform.position = new Vector3(floorHit.point.x, floorHit.point.y + 0.25f, floorHit.point.z);}}}//滚轮缩放public class ViewCtrl : MonoBehaviour{public float wheelspeed;void Update(){transform.Translate(0, 0, Input.GetAxis("Mouse ScrollWheel") * wheelspeed * Time.deltaTime, Space.Self);}}

14.写一个角色控制器,鼠标控制屏幕晃动,鼠标控制开枪。

    public class Player : MonoBehaviour{public GameObject _prefabBullet;private float _angleSpeed = 120f;void Update(){float eularY = Input.GetAxis("Mouse X") * _angleSpeed * Time.deltaTime;transform.Rotate(new Vector3(0, eularY, 0));if (Input.GetMouseButtonDown(0)){Instantiate(_prefabBullet, transform.position, transform.rotation);}}}

15.3D空间有三个cube当做点,有一条鱼的模型,要求在三点之间游动,要

  • 求转向平滑一点,控制鱼的运动朝向(用四元数和欧拉角)使用transform.localRotation = Quaternion.Slerp(Quaternion a,Quaternion b,float c)实现物体平滑转向

16.设计一款计时器(Timer)功能,拥有基础事件:开始计时、暂停计时,停止计时【计时器事件】

public class Timer : MonoBehaviour
{public delegate void MyEventHandler(float currentTime);#region 计时器的三种基础事件public static event MyEventHandler onTimerStart;public static event MyEventHandler onTimerPause;public static event MyEventHandler onTimerStoped;#endregionprivate bool isStarted = false;public bool IsStarted{get{return isStarted;}}private bool isStoped = true;public bool IsStoped{get{return isStoped;}}private float totalTime = 0;// Update is called once per framevoid Update(){//空格键当作“开始/暂停”键if (Input.GetKeyDown(KeyCode.Space)){OnChangeState();}//回车键当作“停止”键if (Input.GetKeyDown(KeyCode.Return)){OnSetStop();}if (isStarted){isStoped = false;totalTime += Time.deltaTime;}}void OnChangeState(){var _startState = !isStarted;isStarted = _startState;if (isStarted){//检查onTimerStart是否为空,防止报空 (废话了。。。下面不做赘述)if (onTimerStart != null){onTimerStart(totalTime);}else{Debug.Log("onTimerStart is Empty");}}else{if (onTimerPause != null){onTimerPause(totalTime);}else{Debug.Log("onTimerPause is Empty");}}}void OnSetStop(){if (onTimerStoped != null){onTimerStoped(totalTime);}else{Debug.Log("onTimerStoped is Empty");}isStarted = false;isStoped = true;totalTime = 0;}
}

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

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

相关文章

63 C++ 多线程 timed_mutex,recursive_timed_mutex

前提 &#xff1a;以往的mutex如果拿锁子拿不到&#xff0c;就会一直等待。 timed_mutex 和 recursive_timed_mutex则不同&#xff0c;这两个提供了方法&#xff0c;可以不一直等待。 try() 方法--mutex 和 timed_mutex 都有&#xff0c;且说明都一样 bool try_lock();(C11 起)…

vant组件库的简单使用

1. 组件库的选择 组件库并不是唯一的&#xff0c;常用的组件库还有以下几种&#xff1a; pc 端:element-uielement-plus iviewelement-plus iviewant-design移动端&#xff1a;vant-uiMint UI (饿了么)Cube UI (滴滴)… 2. vant组件库 主要参考官网&#xff1a;Vant官网 3…

面对不平衡二元分类问题是否需要使用SMOTE技术?

摘要 在训练分类模型之前平衡数据是解决表格数据中不平衡二元分类任务的流行技术。平衡通常是通过复制少数样本或生成合成少数样本来实现的。虽然众所周知&#xff0c;平衡对每个分类模型的影响不同&#xff0c;但大多数先进的实证研究并未将强大的最先进&#xff08;SOTA&…

python实例100第30例:一个5位数,判断它是不是回文数

题目&#xff1a;一个5位数&#xff0c;判断它是不是回文数。即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。 程序分析&#xff1a;即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。 程序源代码&#xff1a; #!/usr/bin/pyt…

elementbi表格的列合并,注意这是列合并不是行合并

先准备列合并代码 //先准备列合并代码 export function rowMergeHandle(arr, data) {if (!Array.isArray(arr) && !arr.length) return false;if (!Array.isArray(data) && !data.length) return false;let needMerge {};arr.forEach((i, idx) > {needMer…

Qt6入门教程 8:信号和槽机制(连接方式)

目录 一.一个信号与槽连接的例子 二.第五个参数 1.Qt::AutoConnection 2.Qt::DirectConnection 3.Qt::QueuedConnection 4.Qt::BlockingQueuedConnection 5.Qt::UniqueConnection 三.信号 四.connect函数原型 五.信号与槽的多种用法 六.槽的属性 一.一个信号与槽连接…

R语言【cli】——builtin_theme():内置的CLI主题

Package cli version 3.6.0 Description 此主题始终处于活动状态&#xff0c;并且位于主题堆栈的底部。 Usage builtin_theme(dark getOption("cli.theme_dark", "auto")) Argument 参数【dark】&#xff1a;是否使用黑暗主题。cli.theme_dark选项可用…

AIGC时代高效阅读论文实操

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

3d渲染软件有哪些?3d云渲染推荐

目前市面上的3D渲染软件非常多&#xff0c;不同的建模软件都有自己的渲染方式&#xff0c;根据所处行业的不同和项目需要&#xff0c;设计师可以选择不同的软件帮助展示最终效果。 主流的渲染软件有&#xff1a;VRay和Corona&#xff1a;一般用于室内效果图渲染&#xff0c;与3…

go 语言爬虫库goquery介绍

文章目录 爬虫介绍goquery介绍利用NewDocumentFromReader方法获取主页信息Document介绍通过查询获取文章信息css选择器介绍goquery中的选择器获取主页中的文章链接 爬取总结 爬虫介绍 爬虫&#xff0c;又称网页抓取、网络蜘蛛或网络爬虫&#xff0c;是一种自动浏览互联网并从网…

chapter10-让你拥有“火眼金睛”的 Fiddr4 和其他工具

在前面的课程中&#xff0c;我们通过一个简单的天气预报服务&#xff0c;拓展了如何使用邮件、短信&#xff0c;以及部署在服务器上&#xff0c;完整的开发了一款可以正式使用的小程序。但是有的同学可能也会产生抱怨&#xff1a;这门课不是是爬虫入门吗&#xff1f;为什么讲的…

HttpServletRequest HttpEntity StringEntity 区别

HttpEntity&#xff1a; 在 Apache HttpClient 中是一个接口&#xff0c;它代表一个可读或可写的HTTP消息实体&#xff0c;包括请求体和响应体。 在发送HTTP请求时&#xff0c;可以附带各种类型的实体内容&#xff0c;而在接收HTTP响应时&#xff0c;则会从服务器获取相应的实…

如何在Servlet中获取请求参数的值

看看这个大佬做的动图吧&#xff01; 在Servlet中&#xff0c;你可以使用HttpServletRequest对象来获取请求参数的值。HttpServletRequest对象提供了一些方法&#xff0c;允许你访问从客户端发送的请求信息。以下是一些获取请求参数的常用方法&#xff1a; getParameter(String…

node.js项目express的初始化

目录 1.初始化项目2.配置跨域3.开始编写API3.1准备3.2路由处理函数router_make下的user.js3.3路由模块router下的user.js3.4入口文件app.js里面去新增这段代码3.5启动项目进行测试 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你…

小程序学习-19

Vant Weapp - 轻量、可靠的小程序 UI 组件库 ​​​​​ Vant Weapp - 轻量、可靠的小程序 UI 组件库 安装出现问题&#xff1a;rollbackFailedOptional: verb npm-session 53699a8e64f465b9 解决办法&#xff1a;http://t.csdnimg.cn/rGUbe Vant Weapp - 轻量、可靠的小程序…

Unity中URP下的SimpleLit片元着色器

文章目录 前言一、SimpleLit片元着色器大体框架1、传入 和 返回2、GPU实例化部分3、准备 BlinnPhong 光照模型计算需要的 SurfaceData4、准备 BlinnPhong 光照模型计算需要的 InputData5、进行 BlinnPhong 的计算、雾效颜色混合及透明度计算 二、准备SurfaceData1、SurfaceData…

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)

地址簿相关功能 1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码实现1.2.1 Mapper层1.2.2 Service层1.2.3 Controller层 1.1 需求分析和设计 1.1.1 产品原型 地址簿&#xff0c;指的是消费者用户的地址信息&#xff0c;用户登录成功后可以维护自己的地…

Salesforce开发者 - 从入门到精深

# 前言 1.1 Salesforce 平台简介 Salesforce 是一种云计算平台&#xff0c;专注于客户关系管理&#xff08;CRM&#xff09;。它提供了一整套工具和服务&#xff0c;用于开发、定制和管理企业应用程序。 1.2 为什么选择 Salesforce 开发 - 快速开发&#xff1a;通过Salesfo…

51单片机中断

1、什么是中断&#xff1f; CPU在处理某一事件A时&#xff0c;发生了另一事件B请求CPU迅速去处理&#xff08;中断发生&#xff09;&#xff1b; CPU暂时中断当前的工作&#xff0c;转去处理事件B&#xff08;中断响应和中断服务&#xff09;&#xff1b; 待CPU将事件B处理完…

【书生·浦语】大模型实战营——第六课笔记

视频链接&#xff1a;https://www.bilibili.com/video/BV1Gg4y1U7uc/?vd_source5d94ee72ede352cb2dfc19e4694f7622 教程文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/opencompass/opencompass_tutorial.md 仓库&#xff1a;https://github.com/open-compa…