gpt4 book ai didi

algorithm - 给定顶点和中心点向上或向下缩放三角形

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:42 24 4
gpt4 key购买 nike

我正在使用 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);

编辑: 我使用的是 Eigen 库,所以 v1(0) 表示顶点 v1 的 x 坐标,v1(1) 表示顶点 v1 的 y 坐标

最佳答案

线

double distance = center - v1;

肯定是错的。 centerv1 都是点。这意味着它们有两个或三个组件(取决于您是在 2D 还是 3D 中工作),因此 distance 不能是 double(即标量)但必须成为一个向量。

这就是我计算 A 的方式(BC 的计算是类似的):

vector3d A;
for(std::size_t i = 0; i < 3; ++i)
A(i) = center(i) + 1.25 * (V1(i) - center(i));

V1(i) - center(i) 部分表示向量 (V1 - center) 的第 i 坐标。右手边也代表“从中心往同一个方向走,但距离是原来的 1.25 倍。”

一些进一步的注意事项

  • 从您的示例中不清楚您是在 2D 还是 3D 中工作。一方面,您使用 vector3d,另一方面,您似乎只使用 xy 坐标进行操作。<
  • 我不明白,为什么你使用 v1(0) = A(0); 根据我对你问题的理解,A 已经是答案。
  • 与其将基本相同的代码复制粘贴三次(一次用于A,一次用于B,一次用于C),它可能将它变成一个可以调用三次的函数很有用。

祝你工作顺利!

关于algorithm - 给定顶点和中心点向上或向下缩放三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com