java - 在 Android 中查找路径中包含的点

标签 java android path contains

他们决定不在 Android 中添加 contains 方法(用于 Path)是有原因的吗?

我想知道我在路径中有哪些点,并希望它比在这里看到的更容易:

How can I tell if a closed path contains a given point?

创建一个 ArrayList 并将整数添加到数组中对我来说会更好吗? (我只在控制语句中检查一次点)即。 if(myPath.contains(x,y)

到目前为止,我的选择是:

  • 使用区域
  • 使用数组列表
  • 扩展类(class)
  • 您的建议

我只是在寻找最有效的方法来解决这个问题

最佳答案

我刚才遇到了同样的问题,经过一番搜索,我发现这是最好的解决方案。

Java 有一个 Polygon 类和一个 contains() 方法,可以让事情变得非常简单。遗憾的是,Android 不支持 java.awt.Polygon 类。但是,我找到了写 equivalent class 的人。 .

我认为您无法从 Android Path 类中获取构成路径的各个点,因此您必须以不同的方式存储数据。

该类使用交叉数算法来确定该点是否在给定的点列表内。

/**
 * Minimum Polygon class for Android.
 */
public class Polygon
{
    // Polygon coodinates.
    private int[] polyY, polyX;

    // Number of sides in the polygon.
    private int polySides;

    /**
     * Default constructor.
     * @param px Polygon y coods.
     * @param py Polygon x coods.
     * @param ps Polygon sides count.
     */
    public Polygon( int[] px, int[] py, int ps )
    {
        polyX = px;
        polyY = py;
        polySides = ps;
    }

    /**
     * Checks if the Polygon contains a point.
     * @see "http://alienryderflex.com/polygon/"
     * @param x Point horizontal pos.
     * @param y Point vertical pos.
     * @return Point is in Poly flag.
     */
    public boolean contains( int x, int y )
    {
        boolean oddTransitions = false;
        for( int i = 0, j = polySides -1; i < polySides; j = i++ )
        {
            if( ( polyY[ i ] < y && polyY[ j ] >= y ) || ( polyY[ j ] < y && polyY[ i ] >= y ) )
            {
                if( polyX[ i ] + ( y - polyY[ i ] ) / ( polyY[ j ] - polyY[ i ] ) * ( polyX[ j ] - polyX[ i ] ) < x )
                {
                    oddTransitions = !oddTransitions;          
                }
            }
        }
        return oddTransitions;
    }  
}

关于java - 在 Android 中查找路径中包含的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044838/

相关文章:

java - JFreeChart 不会在线程上的每次迭代时显示图形?

python - 从 os.listdir(path) 获取 WinError 3 或 UnicodeDecodeError

java - 为什么不调用paintComponent方法?

java - 如何自定义 Optional 类中 NoSuchElementException 的错误信息

Android:将应用程序使用的所有 SharedPreferences 重置为默认值

android - 在所有 3 个平台(android、ios、windows 手机)上推送通知

algorithm - 在多棵树中找到最佳路径(多层中的多个节点)

python - 将 Python 中的路径添加到笔记本中

java - 我如何在Spring Boot中使用Mailgun接收电子邮件

android - 是否可以在 Android 上显示 svgz?