Algorithm 向上或向下缩放给定的三角形';s顶点和中心点

Algorithm 向上或向下缩放给定的三角形';s顶点和中心点,algorithm,geometry,Algorithm,Geometry,我正在使用OpenGL编写一个程序,我正在尝试编写一个函数,允许用户点击一个三角形,并通过敲击键盘上的键来增加/减少三角形的大小。我知道如何处理按键,但我在数学方面有点困难 如果我有一个三角形的三个顶点和中心点存储,我如何可以提高三角形的比例?换句话说,如何操纵当前顶点使三角形变大而不改变中心点 这是我第一次尝试放大,其中v1、v2和v3是三角形的顶点,A、B和C是放大后三角形的顶点: //distance from center to v1 double distance = center -

我正在使用OpenGL编写一个程序,我正在尝试编写一个函数,允许用户点击一个三角形,并通过敲击键盘上的键来增加/减少三角形的大小。我知道如何处理按键,但我在数学方面有点困难

如果我有一个三角形的三个顶点和中心点存储,我如何可以提高三角形的比例?换句话说,如何操纵当前顶点使三角形变大而不改变中心点

这是我第一次尝试放大,其中v1、v2和v3是三角形的顶点,A、B和C是放大后三角形的顶点:

//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)用于替代表单。