获得2D平面向量的垂直向量

30 篇文章 1 订阅
	void OnDrawGizmos()
	{
		if (verindex!=-1)
		{
			Gizmos.DrawSphere(transform.TransformPoint(GetComponent<MeshFilter>().mesh.vertices[verindex]), 0.1f);
		}

		Vector3[] worldpos = FindObjectOfType<MakeTriangle>().allVerPos(transform, GetComponent<MeshFilter>().mesh.vertices);
		//找到1、2两个顶点的向量
		Vector3 ver12 = (worldpos[2] - worldpos[1]).normalized;
		ver12 = new Vector3(1, -1);
		Vector3 verti_re = GetVerticalDir(ver12);
		Debug.Log("ver12:"+ ver12);
		Gizmos.DrawLine(worldpos[1], ver12);
		Gizmos.DrawLine(worldpos[1], worldpos[1]+verti_re);



	}

	/// <summary>
	/// 获取某向量旋转了固定数量之后的向量
	/// </summary>
	public static Vector3 GetVerticalDir(Vector3 a)
	{
		///垂线 = b(y,-x) 
		///垂线2 = b(-y, x)
		return new Vector3(a.y, -a.x, 0);
		//return new Vector3(-a.y, a.x,0);
	}

首先,绘制有夹角的两个平面可以通过绘制两个不平行的向量来实现。具体步骤如下: 1. 定义两个不平行的向量v1和v2,可以通过构造两个起点不同且不在同一条直线上的向量来实现。 2. 计算这两个向量的叉积v3,v3的方向垂直于v1和v2所在的平面。 3. 通过v1和v3构造一个新的向量v4,v4与v1所在的平面的夹角为所求夹角。 4. 将v1和v2所在的平面旋转至v1与x轴的夹角为0度,然后绘制v1和v4所在的平面。 代码实现如下: ```matlab v1 = [1, 2, 3]; % 定义向量v1 v2 = [4, 5, 6]; % 定义向量v2 v3 = cross(v1, v2); % 计算v1和v2的叉积,得到垂直于v1和v2所在平面向量v3 v4 = cross(v1, v3); % 构造v1和v3的叉积,得到与v1所在平面夹角为所求夹角的向量v4 % 将v1和v2所在平面旋转至v1与x轴的夹角为0度,并绘制v1和v4所在平面 theta = atan2d(v1(2), v1(1)); % 计算v1与x轴的夹角,单位为度数 R = [cosd(theta), sind(theta), 0; -sind(theta), cosd(theta), 0; 0, 0, 1]; % 构造旋转矩阵 v1_rot = R * v1'; % 将v1旋转至x轴正方向 v4_rot = R * v4'; % 将v4旋转至与v1所在平面重合 normal = cross(v1_rot, v4_rot); % 计算平面向量 [x, y] = meshgrid(-5:0.1:5); % 定义网格 z = -(normal(1)*x + normal(2)*y) / normal(3); % 计算平面方程 surf(x, y, z); % 绘制平面 xlabel('X'); ylabel('Y'); zlabel('Z'); ``` 对于求两个向量的夹角,可以使用`dot`函数和`norm`函数实现。具体步骤如下: 1. 计算两个向量的点积dot(v1, v2)。 2. 计算两个向量的模norm(v1)和norm(v2)。 3. 通过点积和模的乘积计算两个向量的夹角angle = acosd(dot(v1, v2) / (norm(v1) * norm(v2))),单位为度数。 代码实现如下: ```matlab v1 = [1, 2, 3]; % 定义向量v1 v2 = [4, 5, 6]; % 定义向量v2 angle = acosd(dot(v1, v2) / (norm(v1) * norm(v2))); % 计算v1和v2的夹角,单位为度数 disp(angle); % 输出结果 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值