java - F 点与 X 成 90 度

标签 java android android-canvas

昨天我问了一个问题 - Draw arrow according to path

在那个问题中,我解释说我想在 onTouchEvent 的方向上绘制一个箭头。我在评论中得到了答案,说我应该旋转 Canvas 。

昨晚我有了一个新想法,这就是这个问题的由来。

<小时/>

我通过在 onTouchEvent< 内调用 event.getX(); 获取 MotionEvent.ACTION_DOWN 中的 x 位置/坐标.

我想知道是否可以从x得到一个90度的点/坐标?

这里是一个演示,可以让移动更加清晰:

                                      |
                                      |
                                      |
                                      |
                                      |
                                      |
point I want to get --> x1------------x

如上所示,x1就是我想要得到的。

<小时/>

还值得一提的是,以下内容将不起作用,因为 x 轴可能成一定角度:

x1 = x - value
<小时/>

编辑:

我认为我的问题不清楚,对此感到抱歉。

我将创建一个场景来更好地解释自己

MotionEvent.ACTION_DOWN 内的 onTouchEvent 中,我设置了起始 xy,我们将其称为 xdownydown,通过调用 event.getX()event.getY()

然后在 MotionEvent.ACTION_UP 中我得到 x 和 y,与上面相同,我们将其称为 xupyup

然后我得到中心点,我们将其称为centerxcentery

现在看起来像这样:

               xdown, ydown
              |
              |
              |
              |
              |
              |
              |centerx, centery
              |
              |
              |
              |
              |
              |
               xup, yup

现在我想从 centerx, centery 获得 x 和 y 90 度,假设距离为 40。

另一个恶魔:

                              xdown, ydown
                             |
                             |
                             |
                             |
                             |
                             |
  nintyX,nintyY <------------|centerx, centery
                             |
                             |
                             |
                             |
                             |
                             |
                              xup, yup

最佳答案

似乎您有一些方向并且想要获得垂直方向。

方向 vector 的分量为(dx, dy)

dx = centerx - xup
dy = centery - yup

然后左分量(注意 - “左度”取决于坐标系惯用手!)垂直 vector 是

 px =  - dy
 py =   dx 

(px=dypy=-dx 如果方向不适合您)

要在所需方向上获得距离 D 处的点 ninty,请将 vector 归一化并将其分量乘以 D

lenp = sqrt(px*px + py*py)  
upx = px / lenp
upy = py / lenp
nintyX = centerx + upx * D 
nintyY = centery + upy * D 

关于java - F 点与 X 成 90 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53513066/

相关文章:

android - Android 项目中带有外部 jar 的 java.lang.NoClassDefFoundError

android - 如何在 android 中使用 swipeview 更改下一页?

android - Alpha 属性仅适用于 Android Lollipop,为什么?

android - 在 Canvas 中心画圆

android - jQuery wScratchPad : Responsive Design?

java - 由于 "received expired message",无法使用来自 ActiveMQ 的消息

java - JAVA中编译器内联的编译时常量表达式值是什么?

java - GridBagLayout 标签的一个单元格对齐

java - 了解在鼠标监听器中编写的代码

android - 如何在 Android 中找到形状的旋转点