【问题标题】:Find the center of a shape (path) on a canvas (Android Studio)在画布上查找形状(路径)的中心(Android Studio)
【发布时间】:2017-06-01 16:29:44
【问题描述】:

是否可以在 Android Studio 的画布上找到形状的中心?我已经记录了接触点,但似乎无法弄清楚。然而,画布 (0,0) 点似乎位于左上角,但画布上的路径/形状将中心点视为 (0,0)。

作为我所说的示例,请查看附件图片,我正在尝试找到绿点的位置。

提前感谢您的帮助。

IMG

【问题讨论】:

    标签: android canvas shapes


    【解决方案1】:

    要找到Path 的中心,请使用computeBounds(bounds,exact) 方法,它将第一个参数RectF bounds 设置为路径的范围。那么只要取左右和上下坐标的均值就可以得到路径的几何中心。

    // mPath is your path. Must contain more than 1 path point
    RectF bounds = new RectF();
    mPath.computeBounds(bounds, false); // fills rect with bounds
    PointF center = new PointF((bounds.left + bounds.right) / 2,
                               (bounds.top + bounds.bottom) / 2);
    

    【讨论】:

    • 非常感谢! :-D
    • 只是提到对于高度不规则的形状,您可能会计算质心(简单中心质量)== 所有 x 点的平均值和所有 y 点的平均值。但是发帖人的问题似乎不需要这种改进。 :-)
    • @markE 路径对象不允许访问点,因此必须在添加点时计算点质心。但是使用这些点不会给出一个好的质心。例如,您有 2 个点 (0,0) 和 (0,10),然后在 (1000,5) 的 2 个单位内有 100 个点,点质心位于最右侧,视觉(或区域)质心位于左侧一点(500,5) 除了一大堆复杂的数学运算之外,您还可以使用画布来渲染路径(低分辨率),然后获得非透明像素坐标的平均值以获得良好的视觉质量中心。
    • computeBounds 对我有用,即使是自定义形状。
    【解决方案2】:

    无需数学计算

    RectF bounds = new RectF();
    mPath.computeBounds(bounds, false);
    float centerX = rectF.centerX();
    float centerY = rectF.centerY();
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 2019-11-21
      • 2012-10-28
      • 2014-04-29
      • 1970-01-01
      • 2011-02-04
      • 2017-08-08
      相关资源
      最近更新 更多