Algorithm 向上或向下缩放给定的三角形';s顶点和中心点
我正在使用OpenGL编写一个程序,我正在尝试编写一个函数,允许用户点击一个三角形,并通过敲击键盘上的键来增加/减少三角形的大小。我知道如何处理按键,但我在数学方面有点困难 如果我有一个三角形的三个顶点和中心点存储,我如何可以提高三角形的比例?换句话说,如何操纵当前顶点使三角形变大而不改变中心点 这是我第一次尝试放大,其中v1、v2和v3是三角形的顶点,A、B和C是放大后三角形的顶点:Algorithm 向上或向下缩放给定的三角形';s顶点和中心点,algorithm,geometry,Algorithm,Geometry,我正在使用OpenGL编写一个程序,我正在尝试编写一个函数,允许用户点击一个三角形,并通过敲击键盘上的键来增加/减少三角形的大小。我知道如何处理按键,但我在数学方面有点困难 如果我有一个三角形的三个顶点和中心点存储,我如何可以提高三角形的比例?换句话说,如何操纵当前顶点使三角形变大而不改变中心点 这是我第一次尝试放大,其中v1、v2和v3是三角形的顶点,A、B和C是放大后三角形的顶点: //distance from center to v1 double distance = center -
//distance from center to v1
double distance = center - v1;
distance = distance * 1.25;
Vector3d A = center + distance;
v1(0) = A(0);
v1(1) = A(1);
// v2
distance = center - center;
distance = distance * 1.25;
Vector3d B = center + distance;
v2(0) = B(0);
v2(1) = B(1);
// v3
distance = center - v3;
distance = distance * 1.25;
Vector3d C = center + distance;
v3(0) = C(0);
v3(1) = C(1);
编辑:
我使用的是特征库,所以v1(0)表示顶点v1的x坐标,v1(1)表示顶点v1的y坐标
double distance = center - v1;
这肯定是错误的。center
和v1
都是点。这意味着它们有两个或三个组件(取决于您是在二维还是三维环境中工作),因此距离
不能是双精度
(即标量),而必须是向量
这就是我将如何计算A
(计算B
和C
将是类似的):
vector3d-A;
对于(标准::尺寸\u t i=0;i<3;++i)
A(i)=中心(i)+1.25*(V1(i)-中心(i));
零件V1(i)-中心(i)
表示向量的第i个坐标(V1-中心)。右侧也表示“从中心朝同一方向行走,但距离为1.25倍。”
几点进一步的说明
- 从您的示例中,不清楚您是在二维还是三维环境中工作。一方面,您使用的是
vector3d
,另一方面,您似乎只使用x坐标和y坐标进行操作
- 我不明白,你为什么用
v1(0)=A(0)从我对你问题的理解来看,A
已经是答案了
- 与其将基本相同的代码复制粘贴三次(一次用于
A
,一次用于B
,一次用于C
),不如将其转换为可以调用三次的函数
祝你工作顺利 线路
double distance = center - v1;
这肯定是错误的。center
和v1
都是点。这意味着它们有两个或三个组件(取决于您是在二维还是三维环境中工作),因此距离
不能是双精度
(即标量),而必须是向量
这就是我将如何计算A
(计算B
和C
将是类似的):
vector3d-A;
对于(标准::尺寸\u t i=0;i<3;++i)
A(i)=中心(i)+1.25*(V1(i)-中心(i));
零件V1(i)-中心(i)
表示向量的第i个坐标(V1-中心)。右侧也表示“从中心朝同一方向行走,但距离为1.25倍。”
几点进一步的说明
- 从您的示例中,不清楚您是在二维还是三维环境中工作。一方面,您使用的是
vector3d
,另一方面,您似乎只使用x坐标和y坐标进行操作
- 我不明白,你为什么用
v1(0)=A(0)从我对你问题的理解来看,A
已经是答案了
- 与其将基本相同的代码复制粘贴三次(一次用于
A
,一次用于B
,一次用于C
),不如将其转换为可以调用三次的函数
祝你工作顺利 距离=中心-中心
不是v2wow的正确公式,我不敢相信我错过了……不过我刚刚修复了它,三角形旋转的大小没有增加。没有人正式回答了,所以用修改后的代码更新这个问题。否则,你只会得到更多针对琐碎且已修复的错误的注释和答案。下一个琐碎的错误:使用1.0
的比例因子,而不是1.25
,完成你的数学计算。您应该得到与输入相同的值…distance=center-center
不是v2wow的正确公式,我不敢相信我错过了……不过我刚刚修复了它,三角形旋转的大小没有增加。没有人正式回答了,所以用修改后的代码更新这个问题。否则,你只会得到更多针对琐碎且已修复的错误的注释和答案。下一个琐碎的错误:使用1.0
的比例因子,而不是1.25
,完成你的数学计算。您应该得到与输入相同的值……注意:A(i)=中心+1.25*(V1(i)-center)代码>类似于A(i)=(1.0-1.25)*中心(i)+1.25*V1(i)代码>用于替代形式。注:A(i)=中心+1.25*(V1(i)-中心)代码>类似于A(i)=(1.0-1.25)*中心(i)+1.25*V1(i)代码>用于替代表单。