বহুভুজ বৈশিষ্ট্যটি কোন লাইনের কোন দিকে পড়ে কীভাবে তা নির্ধারণ করবেন?


9

আমার পার্সেল ডেটা ছেদ করে রেখার ডেটা। পার্সেল ডেটাতে কিছু পার্সেল রয়েছে যা লাইনটি ছেদ করে না। নন-ছেদযুক্ত পার্সেলটি ডানদিকে বা লাইনের বাম পাশে থাকলে আমি কীভাবে প্রোগ্রামিয়ালি সনাক্ত করতে পারি? ধন্যবাদ।

উত্তর:


8

IHitTest ইন্টারফেস ব্যবহার করুন । আপনার ক্যোয়ারী পয়েন্টটি বহুভুজ সেন্ট্রয়েড হবে এবং ইনপুট জ্যামিতিটি লাইন হবে। আউটপুটগুলির একটি হ'ল একটি বুলিয়ান (bRightSide) হবে যা আপনাকে জানায় যে আপনি কোন লাইনের দিকে রয়েছেন।


2

আপনি এটির জন্য ডট পণ্যটি ব্যবহার করতে পারেন

/// <summary>
/// Used to indicate the orientation of an object in space 
/// with respect to another object
/// </summary>
public enum OrientationType
{
    Left,
    Right,
    Coincident,
    Unknown
}


/// <summary>
    /// Determines if a point is oriented left, right or coincident with
    /// a directed line. 
    /// Line direction is determined by its From and To points.
    /// </summary>
    /// <param name="p">The point to test.</param>
    /// <param name="segment">The line dividing the space</param>
    /// <returns>An OrientationType indicating the orientation.</returns>
    public static OrientationType GetPointOrientation(IPoint p, ISegment segment)
    {

        OrientationType result = OrientationType.Unknown;

        double Ax = segment.FromPoint.X;
        double Ay = segment.FromPoint.Y;
        double Bx = segment.ToPoint.X;
        double By = segment.ToPoint.Y;
        double Px = p.X;
        double Py = p.Y;

        double nDotV = ((Ay - By) * (Px - Ax)) + ((Bx - Ax) * (Py - Ay));

        if (nDotV < 0)
        {
            result = OrientationType.Right;//opposite direction to normal vector
        }
        else if (nDotV > 0)
        {
            result = OrientationType.Left;
        }
        else if (nDotV == 0)
        {
            result = OrientationType.Coincident;
        }

        return result;
    }

1
আমি মনে করি এটি উল্লেখ করা মূল্যবান যে এই কৌশলটিটির জন্য ইনপুট লাইনটি কেবল 2 টি উল্লম্ব সমন্বিত একটি লাইন হওয়া প্রয়োজন কারণ এটি কোনও আইজেক্ট অবজেক্ট গ্রহণ করছে।
হর্নবিডিড

এটি যথাযথ ইউক্লিডিয়ান লাইনের জন্য পুরো কাজ করে (পুরো জিনিসটি কেবল একটি বিভাগ বা রশ্মি নয়), তবে আমি নিশ্চিত যে ওপি "লাইন" এবং "লাইন ডেটা" পলাইনের জন্য আলগা প্রতিশব্দ হিসাবে ব্যবহার করেছিল , যেখানে বিন্দুর পণ্য পদ্ধতির ব্যর্থতা রয়েছে ails ।
হোবার

2

পছন্দসই ফলাফল পেতে অ্যালগরিদম:

  1. ফোকাসে লাইন নিন
  2. লাইনের জ্যামিতির ডানদিকে (বা বাম) দিকে কিছু বাফার (0.0000005) যুক্ত করুন।
  3. পলিগন জ্যামিতি বাফার জ্যামিতিটি 'ইনসাইড' রয়েছে কিনা বা বহুভুজ জ্যামিতির সাথে 'ওভারল্যাপ' রয়েছে কিনা তা পরীক্ষা করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.