精华内容
下载资源
问答
  • 东京大学1998年入学考试一道题,是向量、数列、双变量、坐标计算、极限等结合的一道题,如下:题目很容易看懂,就是已知那些向量和式子,求xn和yn收敛时候的角度theta取值范围和对应的极限值。一开始,蛮试下前几项...

    7ce6ab8f43088430741f2682ab789ec2.png

    东京大学1998年入学考试一道题,是向量、数列、双变量、坐标计算、极限等结合的一道题,如下:

    42d0e0ba9466185f889aadd6a260db22.png

    题目很容易看懂,就是已知那些向量和式子,求xn和yn收敛时候的角度theta取值范围和对应的极限值。

    一开始,蛮试下前几项,不行;再试着从通项入手,但是式子化太开了不利于计算。下面方法不行,作废。

    01522ea07d85c2fec51f530f189845a7.png

    所以要考虑更简洁的计算过程,把相同的项提取出来,不展开。同时和坐标有关的计算的书写平时比较少用,这里用到,会使表示更加简洁。

    7a3d7bc0056c65b5024472e62cb85503.png

    要看出,yn是xn的复的根号3倍,这是本题的关键之一,这样双变量就少掉一个了。

    7593d48d4c6b9bca0845741b5e052fcc.png

    最后就是等比数列收敛时候,关于角度的取值范围的问题。应该不是什么难的问题。

    4614b5490fe79d8fbfd8c085b6abcac9.png

    本题的关键就是如何简洁地计算和表示,看出xn和yn关系,其余也没啥了。但是这道题也给我们一个很好的解此类问题的思路。

    黄老师数学类文章:

    黄老师讲数学(459)费马点模型巧解东京大学入学考试向量题

    黄老师讲数学(458)若人为球面一点,其实人看不到球面任何其它点

    黄老师讲数学(457)1997年东京大学入学第3大题-向量与空间

    黄老师讲数学(389)抛物线内的等边三角形-东京大学2004年入学试题

    黄老师讲数学(387)东京大学入学考题-几何运动中的概率问题(第二种方法)

    黄老师讲数学(384)东京大学入学考题-几何运动中的概率问题(利用转移矩阵)

    黄老师聊数学(326)参数方程曲线所围区域面积计算-东京大学2008年入学试题

    黄老师聊数学(325)参数方程曲线作图-附东京大学2008年入学数学试卷

    黄老师聊数学(320)镜像的世界-东京大学1997年入学数学试题

    黄老师聊数学(299)一柱面被另一柱面穿透后剩余部分展开图-东京大学1992年入学题

    黄老师聊数学(296)三根等半径圆柱两两垂直相穿所成体积-东京大学2005年入学题

    黄老师聊数学(289)二进制的巧妙构造解决东京大学2015年入学题

    黄老师聊数学(285)导数与不等式的完美结合-东京大学2009年度入学试题

    黄老师聊数学(280)自变量为整数的不等式恒成立-东京大学1997年入学数学试题

    黄老师聊数学(278)整数坐标点数量问题-东京大学1998年入学试题

    黄老师聊数学(202)导数几何意义用于数值估计-以东京大学1999年高考第六题为例

    黄老师聊数学(276)东大2014年入学立体几何题

    黄老师讲数学(456)基本不等式容易出现的一种错误黄老师讲数学(455)谷歌公司的招聘广告求解黄老师讲数学(454)高中三角函数的化简与推理两道题黄老师讲数学(453)别再说什么小学方法也能求这样的面积 黄老师讲数学(452)高中三角函数稍微复杂的计算黄老师讲数学(451)利用向量证明柯西不等式并得到两个不等式结论用于解题2019年10月-2019年12月数学文章合集2019年5月-2019年9月数学文章合集2019年1月-2019年4月数学文章合集2018年10月-2018年12月数学文章合集2018年1-9月 数学文章合集 2016-2017年数学文章合集
    展开全文
  • unity画线之模拟小球抛物线运动轨迹

    千次阅读 2018-06-13 14:10:55
    模拟小球的抛物线运动,如图所示: 这里有点像打台球游戏,模拟在发射之前模拟其轨迹。 划线用的是LineRenderer,不清楚的童鞋可以自行查阅咯。其实也很简单就是挂个LineRenderer脚本,设置它的坐标点就行了,...

    模拟小球的抛物线运动,如图所示:
    这里写图片描述
    这里有点像打台球游戏,模拟在发射之前模拟其轨迹。
    划线用的是LineRenderer,不清楚的童鞋可以自行查阅咯。其实也很简单就是挂个LineRenderer脚本,设置它的坐标点就行了,关键是这坐标点如何计算的问题了。
    高中物理知识,科普一波 首先位移公式,S = V0t+1/2at^2。此次位移的分解,物体在Y轴方向做加速度为重力加速度g的加速运动,在X轴方向匀速运动。则物体在X轴的位移为:Sx=Vxt ,Y轴位移Sy = Vyt+1/2gt^2。
    知道公式之后,我们就可以按时间点计算物体的位移了,而unity中都是用坐标表示那么这种公式转换为代码的逻辑就更加简单了:

    int posCount = 50;
    List<Vector3> posList = new List<Vector3>();
    for (int i = 1; i < posCount ; i++)
        {
            float x = Vec0.x * deltaTime*i;
            float y = 1f / 2f * Physics.gravity.y * Mathf.Pow(deltaTime, 2) + Vec0.y * deltaTime*i;
            posList.Add(oldPos + new Vector2(x, y));
        }

    这样就计算了出来了50个点,将这50个点全部赋值给LineRenderer就基本模拟完成了。

     public void SetPoint(List<Vector2> posList)
        {
            lineRenderer.positionCount = posList.Count;
            for (int i = 0; i < posList.Count; i++)
            {
                lineRenderer.SetPosition(i, posList[i]);
            }
        }

    为什么要说基本完成呢,这种模拟只是模拟球的最开始的轨迹,在游戏中球会发生碰撞,碰撞之后会反弹,那么这种反弹的轨迹如何实现呢?如图:
    这里写图片描述
    首先要知道球在什么时候发生碰撞,碰撞的面法向量是啥?如果知道面的法向量,入射角那么就可以求出线的反射角了。如何知道在什么时候发生碰撞呢?
    这里我用的方法是计算每一段时间球的位移,将这一段时间的位移看作是直线,然后利用unity提供的射线来检测是否碰撞,这种方法由于每一段是直线所以检测出来碰撞值也是近似值,当然也没有考虑球碰撞时的摩擦力对球的影响,总之算是一个粗略的解决方法,如果大家有什么更好的方法,希望评论告知,在下感激不尽,首先抛砖迎玉,实现的具体代码如下:

      public List<Vector2> CalculateTrajectory(Vector2 startVel)
        {
            List<Vector2> posList = new List<Vector2>();
    
            Vector2 curPos = Vector2.zero;
            Vector2 changePos = Vector2.zero;
    
        float detlaTime =0.01f;
            Vector2 vel0 = startVel;
            Vector2 nextPos = Vector2.zero;
            int timeCount = 0;
            Vector2 direction = startVel.normalized; //速度的实时方向
    
            for (int i = 0; i < 100; i++)
            {
                //总的时间
                float time = detlaTime * timeCount;
    
                float x = vel0.x * time;
                float y = 1f / 2f * Physics.gravity.y * Mathf.Pow(time, 2) + vel0.y * time;
                nextPos = changePos + new Vector2(x, y);
    
                // Ray ray = new Ray(curPos + (Vector2)OriginalPos, curSpeedVec);
                direction = new Vector2(vel0.x, Physics.gravity.y * time + vel0.y).normalized;
                RaycastHit hit;
                if (Physics.SphereCast(curPos + (Vector2)OriginalPos, ballCollider.radius, direction, out hit, Vector2.Distance(curPos, nextPos), ~LayerMask.GetMask("Ball")))
                {
                    Vector2 N = hit.normal;
                    changePos = nextPos;// hit.point - OriginalPos + hit.normal * ballCollider.radius;
    
                    vel0 = new Vector2(vel0.x, Physics.gravity.y * time + vel0.y);
    
                    vel0 = vel0 - 2 * (Vector2.Dot(vel0, N)) * N;//改变初始度
                    timeCount = 0;
                }
                timeCount++;
                posList.Add(curPos + (Vector2)OriginalPos);
                curPos = nextPos;
            }
            return posList;
        }
    展开全文
  • 中间点:这里设置为起点和终点的向量相加再乘0.5,再加一个高度,所以应该是起点和终点的中间再偏上的位置,这样应该能得到一个对称的抛物线 var bezierControlPoint = (startPoint + endPoint) * 0.5f+(Vector3.up*...

     

    • 贝塞尔曲线公式

     

     

     

    /// <param name="t">0到1的值,0获取曲线的起点,1获得曲线的终点</param>
    /// <param name="start">曲线的起始位置</param>
    /// <param name="center">决定曲线形状的控制点</param>
    /// <param name="end">曲线的终点</param>
    public static Vector3 GetBezierPoint(float t, Vector3 start, Vector3 center, Vector3 end)
    {
        return (1 - t) * (1 - t) * start + 2 * t * (1 - t) * center + t * t * end;
    }
    

     

    start(p0),center(p1),end(p2)三点确定一条贝塞尔,传入t获取曲线上的坐标

     

     

    • 示例

     

     

    • 确认起点,终点,和贝塞尔曲线的中间点

    起点:警察的坐标

     

    public Transform startTrans;
    

     

    终点:地面上某个点

     

    public Transform endTrans;
    

     

    中间点:这里设置为起点和终点的向量相加再乘0.5,再加一个高度,所以应该是起点和终点的中间再偏上的位置,这样应该能得到一个对称的抛物线

    var bezierControlPoint = (startPoint + endPoint) * 0.5f+(Vector3.up*height);
    

     

    • 获取路径点

    知道了起点,终点,和中间点我们就可以取得这个抛物线的曲线了

     

     

    var startPoint = startTrans.position;
    var endPoint=endTrans.Position;
    var bezierControlPoint = (startPoint + endPoint) * 0.5f+(Vector3.up*height);
    
    _path = new Vector3[resolution];//resolution为int类型,表示要取得路径点数量,值越大,取得的路径点越多,曲线最后越平滑
    for (int i = 0; i < resolution; i++)
    {
        var time = (i+1) / (float)resolution;//归化到0~1范围
        _path[i] = GetBezierPoint(t,startPoint,bezierControlPoint,endPoint);//使用贝塞尔曲线的公式取得t时的路径点
    }
    

     

     

     

    • 绘制曲线

    绘制曲线得方法有很多种,如直接在路径点上生成小球或其他指数物,以及使用lineRenderer绘制。

    这里我选择使用LineRenderer

     

    public LineRenderer lineRender;
    

     

    使用之前得到的路径点给它赋值

     

     

    _lineRender.positionCount = _path.Length;
    _lineRender.SetPositions(_path);
    

     

    • 沿路径运动

    在玩家确定路径之后应该让物体沿着路径移动到目的地

    使用Dotween插件的DoPath直接移动最为简单

    grenade.DOPath(path, 0.8f).SetEase(Ease.Linear);
    

     

    想让物体一直朝着路径方向需要再加上SetLookAt(0)

     

    grenade.DOPath(path, 0.8f).SetLookAt(0).SetEase(Ease.Linear);
    

     

    如果路径点较少,看起来不够平滑可以使用CatmullRom曲线插值类型运动,默认PathType.Linear

    grenade.DOPath(path, 0.8f,PathType.CatmullRom);
    

     

     

     

    展开全文
  • 游戏开发中的物理抛物运动

    千次阅读 2019-03-08 17:58:48
    当空气阻力被忽略时,其运动的路径是抛物线形状。 二、抛物运动的分类 许多类型的抛物运动不仅遵循垂直运动,也遵循水平运动。也就是说,抛物运动在水平方向移动的同时,也在做垂直方向的运动。表明抛物运动包含...

    一、理解抛物线

    • 抛射物是在上抛过程中受到唯一重力影响。举一个抛射物的例子,一颗从加农炮中射出的炮弹;一块被扔到空中的石头;或者一个从桌边掉落的小球;这些物体走过的曲线路径称之为运动轨迹。当空气阻力被忽略时,其运动的路径是抛物线形状。

    二、抛物运动的分类

    许多类型的抛物运动不仅遵循垂直运动,也遵循水平运动。也就是说,抛物运动在水平方向移动的同时,也在做垂直方向的运动。表明抛物运动包含水平和垂直两方向的运动。

    • 垂直运动(上抛)

    在垂直运动过程中,重力作用于物体,并给与物体一个反方向的加速度“-9.8m/s²"(地球的重力加速度)。这就意味着物体的速度在单位时间内降低”-9.8m/s²“。自由落地的速度为:

    V y = g t V_y=gt Vy=gt

    如果物体具有初速度,那么下落物体的速度方程为(g的值为-9.8m/s²):

    V y = V 0 + g t ; V_y=V_0+gt; Vy=V0+gt;

    自由落体的距离公式为:

    S = 1 / 2 ∗ g ∗ t 2 S=1/2*g*t^2 S=1/2gt2

    基于物体具有初速度的情况,物体的位移公式为:

    S v = V 0 t − 1 / 2 ∗ g ∗ t 2 S_v=V_0t-1/2*g*t^2 Sv=V0t1/2gt2

    此为物体的上抛运动,重力方向向下。

    • 水平运动

    在水平运动过程中,运动将是恒定的,因为没有力作用于物体(忽略空气阻力)。因此,速度在水平方向的分量是恒定的,其加速度为0,则水平方向的位移公式为:

    S h = V 0 ∗ t S_h=V_0*t Sh=V0t


    三、具体实现

    下方的C#代码将展示当加农炮发射炮弹时,炮弹的运动轨迹。

    添加下面的脚本到一个加农炮对象上。为炮弹和轨迹点制作预制件(prefab),它们将会在运行时被实例化,炮弹必须具有Collider组件和Rigidbody组件

    截图


    在这里插入图片描述

    • 核心代码如下所示:
    /// <summary>
    	/// 设置弹道点的位置
    	/// </summary>
    	/// <param name="startPos">炮弹的起始坐标</param>
    	/// <param name="pVelocity">炮弹在对应时间点的速度</param>
    	public void SetTrajectPointPos(Vector3 startPos,Vector3 pVelocity){
    
    		float velocity=Mathf.Sqrt((pVelocity.x*pVelocity.x)+(pVelocity.y*pVelocity.y));
    		float angle=Mathf.Atan2(pVelocity.y,pVelocity.x)*Mathf.Rad2Deg;
    
    		float stepTime=0;
    		stepTime+=0.1f;
    
    		for (int i = 0; i < trajectPointsList.Count; i++)
    		{
    			float dx=velocity*stepTime*Mathf.Cos(angle*Mathf.Deg2Rad);
    			float dy=velocity*stepTime*Mathf.Sin(angle*Mathf.Deg2Rad)-			
    			(Physics.gravity.magnitude*stepTime*stepTime/2);
    			Vector3 pos=new Vector3(startPos.x+dx,startPos.y+dy,2);
    			trajectPointsList[i].transform.position=pos;
    			trajectPointsList[i].GetComponent<SpriteRenderer>().enabled=true;
    			trajectPointsList[i].transform.eulerAngles=
    			new Vector3(0,0,
    			Mathf.Atan2(pVelocity.y - (Physics.gravity.magnitude)*stepTime,pVelocity.x)*
    			Mathf.Rad2Deg);
    			stepTime+=0.1f;
    		}
    	}
    
    • 大致思路如下图:

    在这里插入图片描述

    • 发射控制的核心代码如下
    void Update () {
    		if (isFalling) return;
    		if (Input.GetMouseButtonDown (0)) {
    			isPressed = true;
    			if (currentBulletObj == null) {
    				currentBulletObj = CreateBullet (cannonTrans.position);
    			}
    		} else if (Input.GetMouseButtonUp (0)) {
    			if (currentBulletObj == null) return;
    			isPressed = false;
    			if (isFalling == false) {
    				FireBullet (CalculationFireForce (currentBulletObj.transform.position,
    					Camera.main.ScreenToWorldPoint (Input.mousePosition)));
    			}
    		}
    		if (isPressed) {
    		Vector3 direction = CalculationFireForce (currentBulletObj.transform.position,
    			Camera.main.ScreenToWorldPoint (Input.mousePosition));
    			float angle = Mathf.Atan2 (direction.y, direction.x) * Mathf.Rad2Deg;
    			cannonTrans.eulerAngles = new Vector3 (0, 0, angle);
    			parabolaController.SetTrajectPointPos (cannonTrans.position, 
    			direction / currentBulletObj.GetComponent<Rigidbody> ().mass);
    		}
    	}
    	/// <summary>
    	/// 计算发射时,鼠标按下位置到炮弹初始位置的向量(方向)
    	/// </summary>
    	/// <param name="fromPos">炮弹的位置</param>
    	/// <param name="toPos">鼠标按下时的位置</param>
    	/// <returns></returns>
    	private Vector2 CalculationFireForce (Vector3 fromPos, Vector3 toPos) {
    		return (new Vector2 (toPos.x, toPos.y) - 
    		new Vector2 (fromPos.x, fromPos.y)) * firePower;
    	}
    

    自此,实现的大致思路就是这样,具体大家可以在公众号里下载Demo研究下。

    翻译自: http://www.theappguruz.com/blog/display-projectile-trajectory-path-in-unity

    • 代码做了一些修改。运行环境Unity 2017-4.10

    扫码关注->历史消息->当前文章->末尾->Demo地址:


    在这里插入图片描述

    展开全文
  • cocos-lua 贝塞尔曲线 抛物线

    千次阅读 2020-04-09 14:57:02
    } 所以这里的顺序是 controlPoint_1,controlPoint_2,endPosition 实例 要求:模拟一个射箭的过程,路径是抛物线运动过程中箭头的方向要与曲线运动方向一致。 思路:利用贝塞尔曲线让箭头运动起来,运动的同时每...
  • 写在前面 机械臂用的是五自由度的,我测试时发现逆解精度存在一些问题,...假设机器人末端由P1点沿直线运动到P2点,(x1,y1,z1)\left(x_{1}, y_{1}, z_{1}\right)(x1​,y1​,z1​)和(α(1,β1,γ1)\left(\alpha(_{...
  • 基本思路:双向预测是在list0和list1中分别寻找一个运动向量,然后将MV0和MV1所指向的预测块进行加权得到最终预测块,而DMVR技术不是直接使用MV0和MV1,而是在MV0和MV1周围1-2个像素范围内搜索一个更加精确的MV,...
  • 文章目录微分全微分 偏微分一元函数 y=f(x) 求导二元函数 y=f(x1,x2) ...g(x1​)),x2​=g(x1​):dx1​dx2​​=−fx2​​fx1​​​梯度定义梯度的导数:为正梯度的方向向量内积方向导数:标量一元函数 y=f(x)y=2xy=2xy=
  • 一、向量及其线性运算
  • 利用运动学实现导弹仿真飞行

    千次阅读 2018-12-10 14:15:11
    我们将使用运动学原理实现仿真,这意味着我们将只在计算中使用速度,而不考虑物体上的质量和其他作用的物理力,这些力会影响物体的运动,比如阻力。为了能够模拟导弹击中目标,我们将考虑以下变量: 发射速度,发射...
  • 抛物线运动可以分解为两个不同方向的分运动,其中一个方向为匀速运动,另一个方向为匀加速运动(即物体的加速度方向与初始速度方向不同)。根据这一点,我们有很多种方法可以实现物体的抛物线
  • Unity3D中的空间与运动

    2019-09-19 19:47:32
    文章目录1.简答并用程序验证 1.简答并用程序验证 ...- 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) 分别在两个方向上改变transform中的...
  • 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。2. 编程实践3. ...
  • 我们已经做出了类似抛物线运动,但是可能还不够,因为,我们有的时候想做一个可以在任意方向发射的飞弹,比如说,如果我需要从飞机投掷一个飞弹,这个飞弹在空中飞行的轨迹类似一个抛物线,也就是这样: ...
  • 贝塞尔曲线和基于贝塞尔曲线的刚体运动       贝塞尔曲线(Bezier Cruve)历史 在计算机图形学中,曲线和曲面是重要的组成部分,其中贝塞尔曲线是目前应用比较广泛的曲线之一。但是在20世纪50年代之前,要在...
  • 空间与运动—HW2

    2020-10-05 15:48:58
    请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) 假定空气阻力可以忽略,水平方向上初始速度为1,做匀速运动,竖直方向上易知为匀加速运动。 修改...
  • Unity:空间与运动 作业

    2019-09-22 11:52:48
    1.简答题 ...2.请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) ​ a.修改Transform的属性 using System.Collections; using System.Collections...
  • 空间与运动

    2020-10-05 18:23:08
    2. 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) Method 1   方法一利用公式: x=vxt,y=12gt2x = v_xt, y = \frac{1}{2}gt^2x=vx​t,y=21​gt2 来直接计算出...
  • Box2D集成了大量的物理力学和运动学的计算,并将物理模拟过程封装到类对象中,将对物体的操作以简单友好的接口提供给开发者,只需要调用引擎中相应的对象或方法就可以模拟现实生活中的加速、减速、抛物线运动、...
  • 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。 解答: ...
  • 三、空间与运动

    2020-09-28 21:36:52
    1.2 请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)1.3 写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。2、编程...
  • 3D作业3--空间与运动

    2019-09-21 19:45:08
    请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…)写一个程序,实现一个完整的太阳系, 其他星球围绕太阳的转速必须不一样,且不在一个法平面上。编程实践--牧师与...
  • 首先,一个游戏对象Sphere,然后将含有以下任一代码的脚本拖放到游戏对象上,点击运行,就可以看到对象的抛物线运动轨迹。 修改Transform属性 using System.Collections; using System.Collections.Generic; using...
  • 3D游戏编程作业第三章 空间与运动1、简答并用程序验证 1、简答并用程序验证 ...请用三种方法以上方法,实现物体的抛物线运动。(如,修改Transform属性,使用向量Vector3的方法…) 方法一:vector3 创建一个vector3类
  • 所谓工欲善其事,必先利...则求$J(x,y)$的最小值很简单吧,让J关于x,y的偏导数等于0,即可求出最小点$\hat x,\hat y$,$J(x,y)$的几何图像是一个抛物面,其等值面则是以原点为中心的同心圆环。 那如果加上约束线$y...
  • §4 抛物面 1.椭圆抛物面  (1)标准方程 ... (3)当a=b时,椭圆抛物线面是由OZX平面上的抛物线绕Z轴旋转得到的  (4)平面与椭圆抛物面的交线 *平行于Z轴的平面与椭圆抛物面的交线是抛物线 *垂直
  • 如果你投掷一个铅球或者踢足球,它们将做一个抛物线运动。因为它们总是受一个垂直于地面的重力加速度g的作用。下图为四个方向上的抛物线。 公式: 垂直轴向上的抛物线:y=a(x–h) 2 +k, 顶点为(h,k),...
  • 基于抛物线过渡(梯形加减速)的空间直线插补算法与空间圆弧插补算法(Matlab) 基于单位四元数的姿态插补(Matlab) 我使用了抛物线过渡(也就是梯形加减速)作为空间插补算法的速度规划方法,但是梯形曲线的缺点...
  • 空间与运动

    2020-10-04 17:24:27
    空间与运动 这是3D游戏编程的第三次作业。 文章目录空间与运动说明文档作业内容`1.` 简答并用程序验证【建议做】`2.` 编程实践`3.` 思考题【选做】 说明文档 本次作业我实现了: 使得 hhh 闪光点: 太阳系中的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 486
精华内容 194
关键字:

向量表示运动抛物线