我正在使用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坐标
答案 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
的方式(A
和B
的计算将是类似的):
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倍。”
center
,另一方面,您似乎仅使用 x -和 y 坐标进行操作。vector3d
,从我对您的问题的理解来看,v1(0) = A(0);
已经是答案。A
,一次用于A
和一次用于B
),不如将其转变为一个函数您可以拨打三遍。祝您工作顺利!