有人给我解释一下android开发者网站上的代码吗

有人给我解释一下android开发者网站上的代码吗,android,opengl-es,Android,Opengl Es,我在这个网站上学习这个培训教程 该链接显示了如何响应触摸事件和旋转三角形的示例。 我对代码进行了所有设置和工作,但我不理解这部分代码: private final float TOUCH_SCALE_FACTOR = 180.0f / 320; private float mPreviousX; private float mPreviousY; @Override public boolean onTouchEvent(MotionEvent e) { // MotionEvent repo

我在这个网站上学习这个培训教程

该链接显示了如何响应触摸事件和旋转三角形的示例。 我对代码进行了所有设置和工作,但我不理解这部分代码:

private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private float mPreviousX;
private float mPreviousY;

@Override
public boolean onTouchEvent(MotionEvent e) {
// MotionEvent reports input details from the touch screen
// and other input controls. In this case, you are only
// interested in events where the touch position changed.

float x = e.getX();
float y = e.getY();

switch (e.getAction()) {
    case MotionEvent.ACTION_MOVE:

        float dx = x - mPreviousX;
        float dy = y - mPreviousY;

        // reverse direction of rotation above the mid-line
        if (y > getHeight() / 2) {
          dx = dx * -1 ;
        }

        // reverse direction of rotation to left of the mid-line
        if (x < getWidth() / 2) {
          dy = dy * -1 ;
        }

        mRenderer.setAngle(
                mRenderer.getAngle() +
                ((dx + dy) * TOUCH_SCALE_FACTOR));
        requestRender();
}

mPreviousX = x;
mPreviousY = y;
return true;
}
private final float TOUCH\u SCALE\u FACTOR=180.0f/320;
私人浮动MPX;
私家车;
@凌驾
公共事件(运动事件e){
//MotionEvent从触摸屏报告输入详细信息
//和其他输入控件。在这种情况下,您仅
//对触摸位置改变的事件感兴趣。
float x=e.getX();
float y=e.getY();
开关(如getAction()){
case MotionEvent.ACTION\u移动:
浮点数dx=x—mPreviousX;
浮动dy=y-mPreviousY;
//中线以上的反向旋转方向
如果(y>getHeight()/2){
dx=dx*-1;
}
//旋转方向与中线左侧相反
if(x
getAngle和setAngle是mRenderer对象中的一种实用方法,如链接中所示的示例所示


我需要解释一下这段代码是如何精确计算角度的,它如何将增量dx和dy以及其中的一些加起来,并将其用作角度,以及getHeight和getWidth发生了什么,这些不是整个屏幕的高度和宽度吗?我希望我已经说得够清楚了,谢谢。

尽管这个问题被大量否决,但忽略一个最常见(几乎)的openGL开发人员问题是不公平的所有的示例和教程都设计得非常糟糕,这在早期阶段误导了许多开发人员,甚至使他们失去了理解其工作原理的希望

原因是一个基本的openGL设置需要大量的知识,并且代码量很大。一个熟练的开发人员会将代码分解为多个类,如着色器、上下文、缓冲区、对象、矩阵。。。而几乎所有的示例或教程都将在同一个类/文件中显示所有内容,这仅仅是因为对于新手来说,导航起来更容易。这会导致作者试图找到一个最小(行数)的解决方案来解决一个与你正在阅读的文章没有直接联系的问题

关于这个例子,你正在使用:我不知道整个例子或者它看起来是什么样子,但是只要看到你发布的方法,你就会发现中间有一个形状(如上面提到的三角形),它通过拖动屏幕而旋转。

您通常要做的是获取从中心到手指的向量
(x-getWidth(),y-getHeight())
,然后可以通过
atan2f
等方法来计算角度,然后将角度设置为对象。这实际上也是一种较短的方法,但它需要一些数学知识,当然也需要一些代码本身的解释

因此,作者使用了一个非常简单的过程,即通过垂直或水平拖动,对象将旋转一定角度,旋转方向取决于您拖动屏幕的哪个部分。此外,作者实际上增加了垂直和水平旋转,这最终只是2个值的总和


我同意,对于缺乏此类编码经验的开发人员来说,理解这一点可能会非常混乱。如果没有别的,这个答案应该是对所有可能的未来的教程和例子作者的考虑。

我也寻求解释: