当前位置: 首页 > 编程笔记 >

Unity实现绕任意轴任意角度旋转向量

陈欣荣
2023-03-14
本文向大家介绍Unity实现绕任意轴任意角度旋转向量,包括了Unity实现绕任意轴任意角度旋转向量的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了Unity实现绕任意轴任意角度旋转向量的具体代码,供大家参考,具体内容如下

游戏中有一需求,就是一个矩形或者Cube绕着某一点旋转任意角度,现在给出下面算法。

public static Vector3 RotateRound(Vector3 position, Vector3 center, Vector3 axis, float angle)
  {
    Vector3 point = Quaternion.AngleAxis(angle, axis) * (position - center);
    Vector3 resultVec3 = center + point;
    return resultVec3;
  }

测试用例

using UnityEngine;
using System.Collections;
 
public class RotateTest : MonoBehaviour 
{
  public LineRenderer line1;
  public LineRenderer line2;
  public float angle = 30f;
  
  private Vector3 v0;
  private Vector3 v1;
  private Vector3 v2;
  private Vector3 v3;
  private Vector3 v4;
  private Vector3 vCenter;
  void Start()
  {
    v0 = new Vector3(3f,0f,1f);
    v1 = new Vector3(1f, 0f, 3f);
    v2 = new Vector3(4f, 0f, 6f);
    v3 = new Vector3(6f, 0f, 4f);
    vCenter = new Vector3(2f, 0f, 2f);
  }
 
 // Use this for initialization
 void Update () 
  {
   line1.SetVertexCount(5);
    line1.SetPosition(0,v0);
    line1.SetPosition(1,v1);
    line1.SetPosition(2,v2);
    line1.SetPosition(3,v3);
    line1.SetPosition(4,v0);
 
    line2.SetVertexCount(5);
    Vector3 v01 = MathUtils.RotateRound(v0, vCenter, Vector3.up, angle);
    Vector3 v11 = MathUtils.RotateRound(v1, vCenter, Vector3.up, angle);
    Vector3 v21 = MathUtils.RotateRound(v2, vCenter, Vector3.up, angle);
    Vector3 v31 = MathUtils.RotateRound(v3, vCenter, Vector3.up, angle);
    Vector3 v41 = MathUtils.RotateRound(v4, vCenter, Vector3.up, angle);
    line2.SetPosition(0, v01);
    line2.SetPosition(1, v11);
    line2.SetPosition(2, v21);
    line2.SetPosition(3, v31);
    line2.SetPosition(4, v01);
 }
}

效果图

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍java实现图片无损任意角度旋转,包括了java实现图片无损任意角度旋转的使用技巧和注意事项,需要的朋友参考一下 前言 在做项目的时候遇到一个业务需要对图片进行旋转,于是找到一个工具类,亲测有效;在此与大家共享,需要用时可以直接用哈! 实战 一、旋转工具类代码: 二、调用工具类的代码: 三、效果 1、被旋转的图片: 2、顺时针旋转90度图片: 3、顺时针旋转180度图片: 4、顺时针

  • 问题内容: 将转盘旋转到半圆形(北半球)图像的顶部作为背景。范围可以是0-180度。输入进行画布转换的方法时,刻度盘将旋转并停在匹配的值上。这是我根据phrogz传递的帮助和示例进行的尝试 问题答案: 通常,您要执行的操作是: 将上下文转换为画布上对象应旋转的点。 旋转上下文。 通过对象内旋转中心的负偏移来转换上下文。 在0,0处绘制对象。 在代码中: 这是一个实际的示例,展示了这一点。(旋转的数

  • 我正在尝试在虚拟桌面程序的API中编写脚本(javascript),以便我可以操作一些令牌(Car Wars :))。 我正在寻找答案,但似乎我正在挣扎并重新发明轮子,所以我想我会寻求帮助。我感到困惑的一个原因是程序返回基于y是向下的结果,Deg顺时针方向,这与所有trig公式想要的(逆时针方向和y是向上的)不同。 这是我可以访问的内容。矩形围绕中心、中心点 (x,y)、宽度、高度和旋转旋转。我有

  • 我需要将PDF页面的内容旋转任意角度,然后旋转PDF页面。setRotation(int)命令限制为90度的倍数。页面的内容是矢量和文本,我需要能够在以后放大内容,这意味着我无法将页面转换为图像,因为分辨率降低。

  • 理论上,我需要做的是定义一个段落的宽度和高度,为用户设置文本、字体、字体样式、对齐方式(居中、左、右、对齐),最后设置旋转。 根据我对Itext的了解,我可以创建一个段落来设置用户属性,并使用ColumnText对象来设置绝对位置、宽度和高度。然而,它不可能设置任何比单行更大的旋转。 我也不能使用表格单元格,因为旋转方法只允许90的倍数。

  • 画布宽高为1920 1080,在里面添加一个长方形,宽高为200 20,长方形在画布的坐标xy为100 100,这个长方形使用rotate旋转任意角度后,怎么计算旋转后长方形在画布上的xy的轴距 未旋转 旋转30度 旋转76度 如何平均计算每次随机旋转后长方形距离左上角画布的Xy 算数不行,问了gpt试验之后也不正确