প্রদত্ত পয়েন্টগুলির জন্য সর্বনিম্ন-অঞ্চল-আয়তক্ষেত্রটি সন্ধান করছেন?


71

আপনি যেমন চিত্রটিতে দেখেন, প্রশ্নটি হ'ল:

প্রদত্ত পয়েন্টগুলিতে ন্যূনতম-অঞ্চল-আয়তক্ষেত্র (এমএআর) কীভাবে সন্ধান করবেন?

এবং একটি সমর্থনকারী প্রশ্ন হ'ল:

সমস্যার কোনও বিশ্লেষণী সমাধান আছে কি?

(প্রশ্নের বিকাশ একটি 3D পয়েন্ট মেঘের পয়েন্টগুলির একটি ক্লাস্টারে একটি বাক্স (3 ডি) ফিট করা হবে))

প্রথম পর্যায়ে আমি প্রস্তাব করি যে পয়েন্টগুলির জন্য সমস্যাগুলি সংশোধন করে (সেই পয়েন্টগুলি সমাধানের সাথে জড়িত নয়) এর উত্তল-হাল খোঁজার প্রস্তাব: একটি বহুভুজের জন্য একটি এমআর লাগানো। প্রয়োজনীয় পদ্ধতিটি এক্স ( আয়তক্ষেত্রের কেন্দ্র ), ডি ( দুটি মাত্রা ) এবং এ ( কোণ ) সরবরাহ করবে।


সমাধানের জন্য আমার প্রস্তাব:

  • বহুভুজের সেন্ট্রয়েড সন্ধান করুন ( বস্তুর জ্যামিতির কেন্দ্র সন্ধান করুন? )
  • [এস] একটি সহজ লাগানো আয়তক্ষেত্র অর্থাৎ X এবং Y অক্ষের সমান্তরাল ফিট করুন
    • আপনি minmaxপ্রদত্ত পয়েন্টগুলির এক্স এবং ওয়াইয়ের জন্য ফাংশন ব্যবহার করতে পারেন (উদাহরণস্বরূপ, বহুভুজের কোণগুলি)
  • লাগানো আয়তক্ষেত্রের ক্ষেত্রটি সংরক্ষণ করুন
  • বহুভুজটি সেন্ট্রয়েডের সাথে প্রায় 1 ডিগ্রি ঘোরান
  • সম্পূর্ণ রোটেশন সম্পন্ন না হওয়া অবধি [এস] থেকে পুনরাবৃত্তি করুন
  • ফলাফল হিসাবে সর্বনিম্ন ক্ষেত্রের কোণটি প্রতিবেদন করুন

এটি আমাকে প্রতিশ্রুতিবদ্ধ মনে হচ্ছে, তবে নিম্নলিখিত সমস্যাগুলি উপস্থিত রয়েছে:

  • কোণ পরিবর্তনের জন্য একটি ভাল রেজোলিউশন চয়ন করা চ্যালেঞ্জিং হতে পারে,
  • গণনা ব্যয় বেশি,
  • সমাধান বিশ্লেষণাত্মক নয় বরং পরীক্ষামূলক।

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


45

হ্যাঁ, এই সমস্যার একটি বিশ্লেষণাত্মক সমাধান রয়েছে। আপনি যে অ্যালগরিদমটি খুঁজছেন তা বহুভুজ জেনারালাইজেশনে "ক্ষুদ্রতম পার্শ্ববর্তী আয়তক্ষেত্র" হিসাবে পরিচিত ।

আপনার বর্ণিত অ্যালগরিদম ঠিক আছে তবে আপনি তালিকাবদ্ধ সমস্যাগুলি সমাধান করার জন্য, আপনি এই সত্যটি ব্যবহার করতে পারেন যে এমএআর এর ওরিয়েন্টেশনটি বিন্দু ক্লাউড উত্তল হলের এক প্রান্তের মতো । সুতরাং আপনার কেবল উত্তল হাল প্রান্তের অভিমুখগুলি পরীক্ষা করতে হবে। তোমার উচিত:

  • মেঘের উত্তল হালকে গণনা করুন।
  • উত্তল হলের প্রতিটি প্রান্তের জন্য:
    • প্রান্তমুখী গণনা (আর্টিকান সহ),
    • ঘোরানো উত্তল হলের ন্যূনতম / সর্বাধিক x / y এর সাথে সীমাবদ্ধ আয়তক্ষেত্রের ক্ষেত্রটি সহজেই গণনা করতে এই অরিয়েন্টেশনটি ব্যবহার করে উত্তল হোলটি ঘোরান,
    • প্রাপ্ত সর্বনিম্ন ক্ষেত্রের সাথে সম্পর্কিত ওরিয়েন্টেশন সংরক্ষণ করুন,
  • প্রাপ্ত সর্বনিম্ন ক্ষেত্রের সাথে সম্পর্কিত আয়তক্ষেত্রটি ফিরিয়ে দিন।

জাভা বাস্তবায়নের একটি উদাহরণ সেখানে পাওয়া যায়

3D তে, একইগুলি প্রয়োগ হয়: বাদে

  • উত্তল হাল্ল একটি ভলিউম হবে,
  • পরীক্ষিত ওরিয়েন্টেশনগুলি উত্তল হলের মুখগুলির ওরিয়েন্টেশন (3 ডি তে) হবে।

শুভকামনা!


11
+1 খুব সুন্দর উত্তর! আমি উল্লেখ করতে চাই যে মেঘের প্রকৃত ঘূর্ণন অপ্রয়োজনীয়। প্রথম - আপনি সম্ভবত এটি বোঝাতে চেয়েছিলেন - কেবল হলের প্রান্তগুলি বিবেচনা করতে হবে। দ্বিতীয়ত, ঘোরার পরিবর্তে, বর্তমান দিকটি অর্থোগোনাল ইউনিট ভেক্টরগুলির জোড়া হিসাবে উপস্থাপন করুন। তাদের বিন্দুর পণ্যগুলি হুল ভারটিেক্স স্থানাঙ্কের সাথে গ্রহণ (যা একক ম্যাট্রিক্স অপারেশন হিসাবে করা যেতে পারে) ঘোরানো স্থানাঙ্ক দেয়: কোনও ত্রিকোণমিতি প্রয়োজনীয়, দ্রুত এবং পুরোপুরি নির্ভুল নয়।
whuber

2
লিঙ্কগুলির জন্য ধন্যবাদ। প্রকৃতপক্ষে, কেবলমাত্র প্রান্তের জন্য ঘোরাফেরা প্রস্তাবিত পদ্ধতিটিকে খুব দক্ষ করে তোলে। আমি কাগজটি প্রমাণ করতে পারলাম। যদিও আমি এটিকে প্রথম ভাল উত্তরের আনুগত্যের উত্তর হিসাবে চিহ্নিত করেছি (দুটি / আরও দুর্দান্ত উত্তর চয়ন করতে পারি না :() নীচে whuber এর সম্পূর্ণ উত্তর বিবেচনা করার জন্য আমি দৃ strongly ়তার সাথে সুপারিশ করতে চাই । সেখানে প্রদত্ত পদ্ধতির দক্ষতা (ঘূর্ণন এড়ানো!) অবিশ্বাস্য এবং পুরো পদ্ধতিটি কোডের কয়েকটি লাইন is আমার কাছে এটি পাইথনে সহজেই অনুবাদযোগ্য :)
বিকাশকারী

আপনি দয়া করে জাভা বাস্তবায়ন লিঙ্ক আপডেট করতে পারেন?
মাইরা

হ্যাঁ, হয়ে গেছে!
জুলিয়েন

1
নোট করুন যে 3 ডি-তে এক্সটেনশান এর চেয়ে কিছুটা জটিল। 3 ডি উত্তল হলের প্রতিটি মুখ সীমানা বাক্সের একটি মুখের একটি সম্ভাব্য ওরিয়েন্টেশনকে সংজ্ঞায়িত করে তবে এটি মুখের দিকে লম্বালম্বি নয়। কীভাবে সেই বিমানে বাক্সটি ঘোরানো যায় সেই সমস্যাটি সেই মুখের প্লেনে 2 ডি ন্যূনতম-সীমাবদ্ধ-আয়তক্ষেত্রের সমস্যা হয়ে দাঁড়ায়। মেঘের উত্তল হাল এর প্রতিটি প্রান্তের জন্য প্রদত্ত সমতলে প্রক্ষেপণ করে আপনি একটি বাউন্ডিং বাক্স আঁকতে পারেন যা আপনাকে 3D এ আলাদা ভলিউম দেবে।
উইল

40

@ জুলিয়েনের দুর্দান্ত সমাধানটির পরিপূরক হিসাবে, এখানে একটি কার্যকরী বাস্তবায়ন রয়েছে Rযা কোনও জিআইএস-নির্দিষ্ট প্রয়োগকে গাইড করার জন্য সিউডোকোড হিসাবে কাজ করতে পারে (বা সরাসরি প্রয়োগ করা যেতে পারে R)। ইনপুট হল বিন্দু স্থানাঙ্কের একটি অ্যারে। আউটপুট (এর মান mbr) হ'ল ন্যূনতম বাউন্ডিং আয়তক্ষেত্রের উল্লম্বের একটি অ্যারে (এটি বন্ধ করার জন্য প্রথমটি পুনরাবৃত্তি করে)। কোনও ত্রিকোণমিতিক গণনার সম্পূর্ণ অনুপস্থিতি নোট করুন।

MBR <- function(p) {
  # Analyze the convex hull edges     
  a <- chull(p)                                   # Indexes of extremal points
  a <- c(a, a[1])                                 # Close the loop
  e <- p[a[-1],] - p[a[-length(a)], ]             # Edge directions
  norms <- sqrt(rowSums(e^2))                     # Edge lengths
  v <- e / norms                                  # Unit edge directions
  w <- cbind(-v[,2], v[,1])                       # Normal directions to the edges

  # Find the MBR
  vertices <- p[a, ]                              # Convex hull vertices
  x <- apply(vertices %*% t(v), 2, range)         # Extremes along edges
  y <- apply(vertices %*% t(w), 2, range)         # Extremes normal to edges
  areas <- (y[1,]-y[2,])*(x[1,]-x[2,])            # Areas
  k <- which.min(areas)                           # Index of the best edge (smallest area)

  # Form a rectangle from the extremes of the best edge
  cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,])
}

এটির ব্যবহারের উদাহরণ এখানে:

# Create sample data
set.seed(23)
p <- matrix(rnorm(20*2), ncol=2)                 # Random (normally distributed) points
mbr <- MBR(points)

# Plot the hull, the MBR, and the points
limits <- apply(mbr, 2, range) # Plotting limits
plot(p[(function(x) c(x, x[1]))(chull(p)), ], 
     type="l", asp=1, bty="n", xaxt="n", yaxt="n",
     col="Gray", pch=20, 
     xlab="", ylab="",
     xlim=limits[,1], ylim=limits[,2])                # The hull
lines(mbr, col="Blue", lwd=3)                         # The MBR
points(points, pch=19)                                # The points

উপস্থিত MBR

সময় উত্তল হাল আলগোরিদমের গতি দ্বারা সীমাবদ্ধ, কারণ হলের মধ্যে উল্লম্ব সংখ্যা প্রায় সর্বদা মোটের তুলনায় অনেক কম থাকে। বেশিরভাগ উত্তল হাল আলগোরিদম হ'ল এন পয়েন্টগুলির জন্য O (n * লগ (এন)) : আপনি স্থানাঙ্কগুলি যতটা দ্রুত পড়তে পারেন তেমন গতি করতে পারবেন।


+1 কী আশ্চর্য সমাধান! দীর্ঘ অভিজ্ঞতা থাকার পরেই এই জাতীয় ধারণা আসে। এখন থেকে আমি আমার বিদ্যমান কোডগুলি এই দুর্দান্ত উত্তরে অনুপ্রাণিত হয়ে অপ্টিমাইজ করতে আগ্রহী।
বিকাশকারী

আমি আশা করি আমি এই দুটি বার upvote করতে পারে। আমি আর শিখছি এবং আপনার উত্তরগুলি ক্রমাগত অনুপ্রেরণার উত্স।
জন পাওয়েল

1
@retrovius (ঘোরানো) পয়েন্টগুলির একটি সেটের সীমানা আয়তক্ষেত্রটি চারটি সংখ্যার দ্বারা নির্ধারিত হয়: ক্ষুদ্রতম x স্থানাঙ্ক, বৃহত্তম x স্থানাঙ্ক, ক্ষুদ্রতম y স্থানাঙ্ক এবং বৃহত্তম y স্থানাঙ্ক। "কিনারা বরাবর চরম" এটি বোঝায়।
whuber

1
@ রেট্রোভিয়াস এই গণনাগুলিতে উত্সটির কোনও ভূমিকা নেই, কারণ সবকিছু শেষ ব্যতীত স্থানাঙ্কের পার্থক্যের উপর ভিত্তি করে, যেখানে ঘোরানো স্থানাঙ্কগুলিতে গণনা করা সেরা আয়তক্ষেত্রটি কেবল সহজভাবে পিছনে ঘোরানো হয়। যদিও এটি একটি সমন্বিত ব্যবস্থা ব্যবহারের জন্য স্মার্ট ধারণা যেখানে উত্সটি পয়েন্টগুলির নিকটে থাকে (ভাসমান পয়েন্ট যথার্থতা হ্রাস করতে), অন্যথায় উত্সটি অপ্রাসঙ্গিক।
whuber

1
@ রেট্রোভিয়াস আপনি আবর্তনের সম্পত্তি হিসাবে এটি ব্যাখ্যা করতে পারেন: যথা, একটি ঘূর্ণনের ম্যাট্রিক্স অর্থোথোনাল। সুতরাং, এক ধরণের সংস্থান হবে লিনিয়ার বীজগণিত (সাধারণত) বা বিশ্লেষক ইউক্লিডিয়ান জ্যামিতির (বিশেষত) গবেষণা করা study যাইহোক, আমি খুঁজে পেয়েছি যে বিমানের আবর্তনের (এবং অনুবাদ এবং উদ্ধারগুলি) মোকাবেলার সবচেয়ে সহজ উপায় হ'ল পয়েন্টগুলিকে জটিল সংখ্যা হিসাবে দেখানো
হোবার

8

আমি কেবল এটি নিজে প্রয়োগ করেছি এবং আমার উত্তরটি স্ট্যাকওভারফ্লোতে পোস্ট করেছি , তবে আমি অনুভব করেছি যে আমি অন্যটি দেখার জন্য আমার সংস্করণটি এখানে রেখে দেব:

import numpy as np
from scipy.spatial import ConvexHull

def minimum_bounding_rectangle(points):
    """
    Find the smallest bounding rectangle for a set of points.
    Returns a set of points representing the corners of the bounding box.

    :param points: an nx2 matrix of coordinates
    :rval: an nx2 matrix of coordinates
    """
    from scipy.ndimage.interpolation import rotate
    pi2 = np.pi/2.

    # get the convex hull for the points
    hull_points = points[ConvexHull(points).vertices]

    # calculate edge angles
    edges = np.zeros((len(hull_points)-1, 2))
    edges = hull_points[1:] - hull_points[:-1]

    angles = np.zeros((len(edges)))
    angles = np.arctan2(edges[:, 1], edges[:, 0])

    angles = np.abs(np.mod(angles, pi2))
    angles = np.unique(angles)

    # find rotation matrices
    # XXX both work
    rotations = np.vstack([
        np.cos(angles),
        np.cos(angles-pi2),
        np.cos(angles+pi2),
        np.cos(angles)]).T
#     rotations = np.vstack([
#         np.cos(angles),
#         -np.sin(angles),
#         np.sin(angles),
#         np.cos(angles)]).T
    rotations = rotations.reshape((-1, 2, 2))

    # apply rotations to the hull
    rot_points = np.dot(rotations, hull_points.T)

    # find the bounding points
    min_x = np.nanmin(rot_points[:, 0], axis=1)
    max_x = np.nanmax(rot_points[:, 0], axis=1)
    min_y = np.nanmin(rot_points[:, 1], axis=1)
    max_y = np.nanmax(rot_points[:, 1], axis=1)

    # find the box with the best area
    areas = (max_x - min_x) * (max_y - min_y)
    best_idx = np.argmin(areas)

    # return the best box
    x1 = max_x[best_idx]
    x2 = min_x[best_idx]
    y1 = max_y[best_idx]
    y2 = min_y[best_idx]
    r = rotations[best_idx]

    rval = np.zeros((4, 2))
    rval[0] = np.dot([x1, y2], r)
    rval[1] = np.dot([x2, y2], r)
    rval[2] = np.dot([x2, y1], r)
    rval[3] = np.dot([x1, y1], r)

    return rval

কর্মে এটির চারটি পৃথক উদাহরণ এখানে দেওয়া হল। প্রতিটি উদাহরণের জন্য, আমি 4 টি এলোমেলো পয়েন্ট তৈরি করেছি এবং সীমাবদ্ধ বাক্সটি পেয়েছি।

এখানে চিত্র বর্ণনা লিখুন

4 টি পয়েন্টে এই নমুনাগুলির জন্য এটি তুলনামূলক দ্রুত:

>>> %timeit minimum_bounding_rectangle(a)
1000 loops, best of 3: 245 µs per loop

হাই জেসিবুস্কিং, আপনি 90 ডিগ্রি কোণে আয়তক্ষেত্র তৈরি করতে সক্ষম? আপনার কোডটি সমান্তরালগুলি পাওয়ার জন্য দুর্দান্ত কাজ করছে তবে আমার নির্দিষ্ট ব্যবহারের ক্ষেত্রে 90 ডিগ্রি কোণ প্রয়োজন। আপনি কীভাবে আপনার কোডটি পৌঁছাতে সংশোধন করতে পারবেন তা সুপারিশ করতে পারেন? ধন্যবাদ!
নাদের আলেকসান

@ ন্যাডার অ্যালেক্সান যদি আপনি জিজ্ঞাসা করছেন যে এটি স্কোয়ারগুলি পরিচালনা করতে পারে কিনা, তবে হ্যাঁ এটি অবশ্যই পারবেন! আমি এটি কেবল একটি ইউনিট স্কোয়ারে চেষ্টা করেছিলাম points = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]), এবং আউটপুটটি array([[1.00000000e+00, 6.12323400e-17], [0.00000000e+00, 0.00000000e+00], [6.12323400e-17, 1.00000000e+00], [1.00000000e+00, 1.00000000e+00]])যা ইউনিট নিজেই হয় (কিছু ভাসমান পয়েন্ট গোলাকার ত্রুটি সহ)। দ্রষ্টব্য: একটি বর্গক্ষেত্র সমান পক্ষের সাথে কেবল একটি আয়তক্ষেত্র, সুতরাং আমি ধরে নিচ্ছি যে এটি কোনও স্কোয়ারটি পরিচালনা করতে পারে যদি এটি সমস্ত আয়তক্ষেত্রকে সাধারণ করে তোলে।
জেসিবুস্কিং

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ. হ্যাঁ, এটি দুর্দান্ত কাজ করছে তবে আমি এটিকে অন্য 4-পক্ষীয় বহুভুজের চেয়ে সর্বদা একটি আয়তক্ষেত্র (প্রতিটি পক্ষের 90 ডিগ্রি কোণ সহ 4 টি দিক) উত্পাদন করতে বাধ্য করার চেষ্টা করছি, যদিও কিছু ক্ষেত্রে এটি একটি আয়তক্ষেত্র তৈরি করে বলে মনে হয় না একটি ধ্রুবক বাধা হতে, আপনি কি জানেন যে এই সীমাবদ্ধতা যুক্ত করতে কোডটি কীভাবে পরিবর্তন করবেন? ধন্যবাদ!
নাদের আলেকসান

হতে পারে gis.stackexchange.com/a/22934/48041 কোনও সমাধানের দিকে আপনাকে গাইড করতে পারে, তাদের উত্তর দেওয়াতে এই সীমাবদ্ধতা রয়েছে বলে মনে হচ্ছে? আপনি একবার সমাধানটি সন্ধান করার পরে, আপনাকে এটির অবদান রাখতে হবে কারণ আমি নিশ্চিত যে অন্যরা এটির পক্ষে দরকারী। শুভকামনা!
জেসিবিউসিং

7

এই সঠিক সমস্যাটি সমাধানের জন্য ন্যূনতম বাউন্ডিং বক্স নামে হোয়াইটবক্স GAT ( http://www.uoguelph.ca/~hydrogeo/Whitebox/ ) এ একটি সরঞ্জাম রয়েছে । সেখানেও ন্যূনতম উত্তল হলের সরঞ্জাম রয়েছে। প্যাচ শেপ টুলবক্সের বেশ কয়েকটি সরঞ্জাম, যেমন প্যাচ ওরিয়েন্টেশন এবং প্রসারিততা ন্যূনতম বাউন্ডিং বাক্সটি অনুসন্ধানের উপর ভিত্তি করে।

এখানে চিত্র বর্ণনা লিখুন


4

নূন্যতম-অঞ্চল সীমানা আয়তক্ষেত্রের জন্য পাইথন সমাধান সন্ধান করতে গিয়ে আমি এই থ্রেডটি পেরিয়ে এসেছি।

এখানে আমার বাস্তবায়ন , যার জন্য ফলাফলটি মাতলাব দিয়ে যাচাই করা হয়েছিল।

সাধারণ বহুভুজগুলির জন্য পরীক্ষার কোড অন্তর্ভুক্ত করা হয়, এবং আমি এটি 3D পয়েন্টক্লাউডের 2D সর্বনিম্ন বাউন্ডিং বাক্স এবং অক্ষের দিকনির্দেশগুলি খুঁজতে ব্যবহার করি।


আপনার উত্তর মুছে ফেলা হয়েছে?
পল রিখটার

স্পষ্টভাবে উৎস এখানে ছিল github.com/dbworth/minimum-area-bounding-rectangle যদিও
sehe

3

ধন্যবাদ @ ঝুঁকির উত্তর এটি দুর্দান্ত সমাধান, তবে বড় পয়েন্টের মেঘের জন্য ধীর। আমি convhullnপ্যাকেজে ফাংশনটি geometryআরও দ্রুত (138 গুলি বনাম 0.03 এস 200000 পয়েন্টের জন্য) পেয়েছি । আমি দ্রুত এখানে দ্রুত সমাধানের জন্য আকর্ষণীয় কারও জন্য আমার কোডগুলি এখানে আটকানো করেছি।

library(alphahull)                                  # Exposes ashape()
MBR <- function(points) {
    # Analyze the convex hull edges                       
    a <- ashape(points, alpha=1000)                 # One way to get a convex hull...
    e <- a$edges[, 5:6] - a$edges[, 3:4]            # Edge directions
    norms <- apply(e, 1, function(x) sqrt(x %*% x)) # Edge lengths
    v <- diag(1/norms) %*% e                        # Unit edge directions
    w <- cbind(-v[,2], v[,1])                       # Normal directions to the edges

    # Find the MBR
    vertices <- (points) [a$alpha.extremes, 1:2]    # Convex hull vertices
    minmax <- function(x) c(min(x), max(x))         # Computes min and max
    x <- apply(vertices %*% t(v), 2, minmax)        # Extremes along edges
    y <- apply(vertices %*% t(w), 2, minmax)        # Extremes normal to edges
    areas <- (y[1,]-y[2,])*(x[1,]-x[2,])            # Areas
    k <- which.min(areas)                           # Index of the best edge (smallest area)

    # Form a rectangle from the extremes of the best edge
    cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,])
}

MBR2 <- function(points) {
    tryCatch({
        a2 <- geometry::convhulln(points, options = 'FA')

        e <- points[a2$hull[,2],] - points[a2$hull[,1],]            # Edge directions
        norms <- apply(e, 1, function(x) sqrt(x %*% x)) # Edge lengths

        v <- diag(1/norms) %*% as.matrix(e)                        # Unit edge directions


        w <- cbind(-v[,2], v[,1])                       # Normal directions to the edges

        # Find the MBR
        vertices <- as.matrix((points) [a2$hull, 1:2])    # Convex hull vertices
        minmax <- function(x) c(min(x), max(x))         # Computes min and max
        x <- apply(vertices %*% t(v), 2, minmax)        # Extremes along edges
        y <- apply(vertices %*% t(w), 2, minmax)        # Extremes normal to edges
        areas <- (y[1,]-y[2,])*(x[1,]-x[2,])            # Areas
        k <- which.min(areas)                           # Index of the best edge (smallest area)

        # Form a rectangle from the extremes of the best edge
        as.data.frame(cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,]))
    }, error = function(e) {
        assign('points', points, .GlobalEnv)
        stop(e)  
    })
}


# Create sample data
#set.seed(23)
points <- matrix(rnorm(200000*2), ncol=2)                 # Random (normally distributed) points
system.time(mbr <- MBR(points))
system.time(mmbr2 <- MBR2(points))


# Plot the hull, the MBR, and the points
limits <- apply(mbr, 2, function(x) c(min(x),max(x))) # Plotting limits
plot(ashape(points, alpha=1000), col="Gray", pch=20, 
     xlim=limits[,1], ylim=limits[,2])                # The hull
lines(mbr, col="Blue", lwd=10)                         # The MBR
lines(mbr2, col="red", lwd=3)                         # The MBR2
points(points, pch=19)   

দুটি পদ্ধতি একই উত্তর পায় (উদাহরণস্বরূপ 2000 পয়েন্ট):

এখানে চিত্র বর্ণনা লিখুন


এই বাস্তবায়নটি 3 ডি স্পেসে প্রসারিত করা সম্ভব (অর্থাত্ নূন্যতম ভলিউম বাক্স সন্ধান করুন যা 3 ডি স্পেসে প্রদত্ত সমস্ত পয়েন্ট অন্তর্ভুক্ত করে)?
সাশা

0

আমি কেবল ওপেনসিভির বিল্ট-ইন ফাংশনটি সুপারিশ করি minAreaRect, যা ইনপুট 2 ডি পয়েন্ট সেটটি সংযুক্ত করে সর্বনিম্ন ক্ষেত্রের একটি ঘোরানো আয়তক্ষেত্র খুঁজে পায়। এই ফাংশনটি কীভাবে ব্যবহার করবেন তা দেখতে, এই টিউটোরিয়ালটি ব্যবহার করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.