给定三角形的顶点和中心点,使其按比例缩放

时间:2018-10-11 19:28:34

标签: algorithm geometry

我正在使用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坐标

1 个答案:

答案 0 :(得分:2)

...
private fun showPopupWindow() {
        val popupView = layoutInflater.inflate(R.layout.standard_popup_window, null)
        popupView.measure(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
        PopupWindow(popupView, popupView.measuredWidth, popupView.measuredHeight).apply {
            setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
            isTouchable = true
            isFocusable = true
            overlapAnchor = true
            width = popupView.measuredWidth
            height = popupView.measuredHeight
            contentView = popupView
            showAsDropDown(fragment_person_details__description)
        }
...

当然是错误的。 double distance = center - v1; center都是点。这意味着它们具有两个或三个分量(取决于您是在2D还是3D模式下工作),因此v1不能是distance(即标量),而必须是矢量。

这就是我计算double的方式(AB的计算将是类似的):

C

vector3d A; for(std::size_t i = 0; i < 3; ++i) A(i) = center(i) + 1.25 * (V1(i) - center(i)); 部分代表向量(V1-中心)的第 i 个坐标。右侧也表示“从V1(i) - center(i)向同一方向行走,但相距1.25倍。”

更多注意事项

  • 根据您的样本尚不清楚是使用2D还是3D。一方面,您使用center,另一方面,您似乎仅使用 x -和 y 坐标进行操作。
  • 我不明白,您为什么使用vector3d,从我对您的问题的理解来看,v1(0) = A(0);已经是答案。
  • 与其将本质上相同的代码复制粘贴三次(一次用于A,一次用于A和一次用于B),不如将其转变为一个函数您可以拨打三遍。

祝您工作顺利!