English 中文(简体)
在轮换后找到三角点
原标题:Finding the points of a triangle after rotation

I m在开放式GL中从事一个(两个)简单的2D项目。 它带有某种异构体。

该船基本上是高度H的骨质,其基数为H/2。

我迄今这样做的方式只是仓储三角地的中心点,然后计算该飞地的最后垂直位置。 该船点为(船员为xy)(CP.x, CP.y + H/2)。 其他两点是(CP.X - H/4, CP.Y - H/2)和(CP.X + H/4, CP.Y - H/2)。

为了让该船接受正确方向,我首先在目前的轮班上 gl光。

然而,这一部分的操作是罚款的,但Im会遇到碰撞探测问题。 目前,我试图进行三角飞机碰撞探测,但这样做,首先需要在轮船后标明实际点。 然而,我却尝试利用三角绳计算这些点。

我的尝试是利用ine子规则,在轮任后找到离散三角地和三角地之间的距离。 举一个例子,下面是我如何在轮换后努力计算点vert的位置:

//pA is a vector struct holding the position of the pointy vertex of the ship (centerPoint.x, centerPoint.y + height / 2)

//Distance between pA and the rotated pointy vertex - using the cosine rule
float distance = sqrt((2 * pow(size / 2, 2)) * (1 - cosf(rotAngle)));

//The angle to the calculated point
float newPointAngle = (M_PI / 2) - rotAngle;
float xDif = distance * cosf(newPointAngle);
float yDif = distance * sinf(newPointAngle);

//Actually drawing the new point
glVertex2f(pA.x - xDif, pA.y - yDif);

任何想法,我会做什么错?

最佳回答

由于有了帮助,但我认为这些解释对我来说是太技术性的。 然而,你向我表明,不存在一个三角地的特殊案例(在表面上,我应该知道),因此,我试图寻找几个方法,找到了为我工作的方法。

The post from estain at 。 引用其职位(为c&教授;p ,但对于陷入类似问题的其他人可能有用):

如果不深入到一般解决办法和数学中去(因为上述海报和许多文章已经涵盖了这一点),我可以给你一个榜样,说明如何解决“在B点上按C级重新排列A点”。

现在。 首先,正如我在前一个职位中所描述的那样,在X轴线上,距离或远,在C级左右或以C级之间轮流使用。

x = L * 宇宙(C)

y = L*sin(C)

同样,单程病媒的公式是x =-y igo 和 = x,这意味着在Y轴上(从中、从中、从中或从中)的点将由C根据公式进行轮换。

x = - L * sin(C)

y = L*(C)

如上述图像所示,最后解决办法是预计病媒轮用的总和,这样我们就可以得出公式。

x = x * cos (C) - y * sin(C)

y = y * cos (C) + x * sin(C)

......但你们知道已经是正确的? 问题在于,这一公式只是围绕着或视而不见的。 因此,我们需要做的是,把我们重新轮任、轮任和随后退步的协调制度推向前进。 可以通过数量复杂或总的解决办法迅速做到这一点,但为了保持其简单性,我们用斜线 to上病媒数学。

第一步;移至起源点。

x = A.x - B.x

y = A.y - B.y

第二步:轮换

x = x * cos (C) - y * sin(C) = (A.x-B.x) * cos(C) - (A.y-B.y) * sin(C)

y = y * cos(C) + x * sin(C) = (A.y-B.y) * cos(C) + (A.x-B.x) * sin(C)

第三步和最后一步,回到协调框架

x = x + B.x = (A.x-B.x) * cos(C) - (A.y-B.y) * sin(C) + B.x

y = y + B.y = (A.y-B.y) * cos(C) + (A.x-B.x) * sin(C)+ B.y

pre! 我们有轮任方案。 下面请各位不要再作任何改动。

点数 B点一角

A.x = (A.x-B.x) * cos(C) - (A.y-B.y) * sin(C) + B.x

A.y = (A.y-B.y) * cos(C) + (A.x-B.x) * sin(C)+ B.y

如果你在我旁听的话(我是一位高超的教师,如果你有的话,那么你会担心,你开展这些行动的次序非常重要。 试着把第3和第1步混在一起,看看你在公式上的差异。

Good!

问题回答

计算新点比较简单。 假定X和 y是三角(即vert)与轮换点(或中心)相对的某一点的坐标。

你们必须把 co子变为平方距离和角组成部分:

float dist, angle;
dist = (x*x) + (y*y);
angle = atan(abs(x)/abs(y));
// a little more code is required for the different quadrants that the angle could be in.

然后轮流:

angle+=rotation_angle;

然后改为:

new_x = sqrt(dist)*sin(angle*pi/180);
new_y = sqrt(dist)*cos(angle*pi/180);




相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签