0

MapViewの場合、マップをタップして必要な数のポイントを作成する機能を提供し、ポイントは線で接続されますが、このようにマップ上の別の線と交差する可能性のある線を描画したくありません

ここに画像の説明を入力

新しい線が他の線と交差するかどうかを確認するために線の座標を取得する方法はありますか?

または、他の誰かがこれを確認する方法について何か提案があれば、それも素晴らしいでしょう

これは、線を描画する私の描画メソッドです

@Override
    public void draw(final Canvas canvas, final MapView mapView, final boolean shadow){
        super.draw(canvas, mapView, shadow);

        try{
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setDither(true);
        paint.setColor(Color.RED);
        paint.setStrokeWidth(3);
        paint.setAlpha(100);
        paint.setStyle(Style.STROKE);

        Path path = new Path();
        Point point1 = null;
        boolean runOnce = false;
        for(int i = 0;i<items.size();i++){
            Point point = new Point();
            mapView.getProjection().toPixels(items.get(i).mGeoPoint, point);

            if(!runOnce)
            {
                path.moveTo(point.x, point.y);
                point1 = new Point(point.x, point.y);
                runOnce = true;
            }
            else
            {
                path.lineTo(point.x, point.y);
            }
        }
        path.lineTo(point1.x, point1.y);
        canvas.drawPath(path, paint);

        path.lineTo(point1.x, point1.y);
        canvas.drawPath(path, paint);

        Paint paint2 = new Paint();
        paint2.setAntiAlias(true);
        paint2.setDither(true);
        paint2.setColor(Color.RED);
        paint2.setStrokeWidth(3);
        paint2.setAlpha(20);
        paint2.setStyle(Style.FILL);

        Path path2 = new Path();
        Point point2 = null;
        boolean runOnce2 = false;
        for(int i = 0; i < items.size(); i++)
        {
            Point point = new Point();
            mapView.getProjection().toPixels(items.get(i).mGeoPoint, point);

            if(!runOnce2)
            {
                path2.moveTo(point.x, point.y);
                point2 = new Point(point.x, point.y);
                runOnce2 = true;
            }
            else
            {
                path2.lineTo(point.x, point.y);
            }
        }

        path2.lineTo(point2.x, point2.y);
        canvas.drawPath(path2, paint2);
        }catch(Exception e){

        }
    }
4

1 に答える 1

1

どうぞ:-)

paulbourke.net/geometry/lineline2d

2 つの線分の交点を数学的に決定する方法を説明します。

端点を交差点としてカウントしたくない場合は、最初に端点が重なっているかどうかを確認してください。これは、次のような if ステートメントを使用して解決できます。

if(Math.abs(x1 - x2) < EPSILON && Math.abs(y1 - y2) < EPSILON)

ここで、EPSILON はエラー許容値で、たとえば 0.001 などです。

于 2012-07-10T14:57:48.097 に答える