【问题标题】:Get New Points from Angle Android从 Angle Android 获取新点
【发布时间】:2018-01-10 00:21:59
【问题描述】:

我正在尝试制作一个我成功制作的可调整大小的触摸视图。您可以找到代码How to make view resizable on touch event

它有 4 个角。您可以通过拖动其中一个角来重新调整该矩形的大小。但是现在我想增强该逻辑并希望在该代码中进行轮换。当用户触摸矩形边缘之一的中心时,我成功找到了角度。但现在的问题是我无法获得角的新位置,以便我可以重绘该矩形并且可以进行旋转。

问题是:如何根据角度计算 4 个角的新位置?

【问题讨论】:

    标签: android math geometry trigonometry rectangles


    【解决方案1】:

    如果您知道旋转的角度,则无需计算矩形的顶点。 一个简单的方法如下

    @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                canvas.save();
                canvas.rotate(60.0f);
    
                paint.setColor(Color.BLACK);
                paint.setStyle(Paint.Style.STROKE);
    
                canvas.drawRect(10, 10, 100, 100, paint);
                canvas.restore();
            }
    

    【讨论】:

    • 我知道旋转画布的场景..但后来点在他们的旧位置。下次我在画布上找不到 4 个角点的新位置。我的朋友,这行不通。
    【解决方案2】:

    据我了解,您想根据旋转角度计算新坐标...这可能比您想象的要简单:

    x' = x × (cosα - sinα)
    y' = y × sinα × cosα
    

    因此,您只需以编程方式应用它,考虑到x'x 的旋转结果,y'y 的旋转结果相同,α 是旋转角度。

    cosαsinα 函数在 Java 中可用作 Math.cos(α)Math.sin(α),但请注意:在 Java 中,所有三角函数都使用弧度而不是度数作为角度,因此您可以考虑: rad = deg * 180 / π 适用于:

    double deg = 45d; //Put instead your degrees
    double rad = deg / 180 * Math.PI; //The radians convertion
    

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      相关资源
      最近更新 更多