Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Cách tính diện tích phần giao của 2 hình chữ nhật trong C#?

  1. #1
    Ngày gia nhập
    11 2010
    Bài viết
    21

    Mặc định Cách tính diện tích phần giao của 2 hình chữ nhật trong C#?

    Em đang tìm giải thuật cho bài toán này mà không nghĩ ra được, anh chị nào có ý kiến nào hay gợi mở giúp em với: Cho 2 hình chữ nhật với các tọa độ các đỉnh và dài rộng, 2 hình này giao nhau với hình dạng khác nhau (chồng lên nhau theo nhiều kiểu khác nhau). Tính diện tích phần giao của 2 hình và diện tích của từng phần ko giao nhau ....Giúp em với :((

  2. #2
    Ngày gia nhập
    07 2010
    Bài viết
    99

    Quy ước :
    + Gốc tọa độ là top-left
    + Oy : hướng xuống
    + Ox : từ trái -> phải

    Visual C# Code:
    1. struct Rectangle
    2. {
    3.     public int X;
    4.     public int Y;
    5.     public int Width;
    6.     public int Height;
    7.  
    8.     public Rectangle(int X,int Y,int Width,int Height)
    9.     {
    10.         this.X = X;
    11.         this.Y = Y;
    12.         this.Width = Width;
    13.         this.Height = Height;
    14.     }
    15. }
    16.  
    17. int Min(int A,int B)
    18. {
    19.     return (A<B)?A:B;
    20. }
    21.  
    22. int Max(int A,int B)
    23. {
    24.     return (A>B)?A:B;
    25. }
    26.  
    27. // Trả về true nếu rectangle A có giao với Rectangle B. Vùng giao nhau là Result.
    28. bool Intersect(Rectangle A, Rectangle B, out Rectangle Result)
    29. {
    30.     Result = new Rectangle(0,0,0,0);
    31.     int left = Max(A.X, B.X);
    32.     int right = Min(A.X + A.Width, B.X + B.Width);
    33.     int top = Max(A.Y, B.Y);
    34.     int bot = Min(A.Y + A.Height, B.Y + B.Height);
    35.     int w = right-left;
    36.     int h = bot-top;
    37.     if (w<=0 || h<=0)
    38.         return false;
    39.     Result = new Rectangle(left,top,w,h);
    40.     return true;
    41. }
    Đã được chỉnh sửa lần cuối bởi nhquynam : 12-01-2013 lúc 12:57 AM.
    Never try, never know

  3. #3
    Ngày gia nhập
    11 2010
    Bài viết
    11

    Code bạn phải chỉnh lại chỗ này mới chạy được
    Visual C# Code:
    1. Result = null; -> Result = new(0,0,0,0);

    Và bị nhầm chỗ này
    Visual C# Code:
    1. Result = new Rectangle(left,right,w,h); -> Result = new Rectangle(left,top,w,h);

    À mà chưa có phần ko giao nhau nhỉ?

  4. #4
    Ngày gia nhập
    07 2010
    Bài viết
    99

    Trích dẫn Nguyên bản được gửi bởi NostraNam Xem bài viết
    Code bạn phải chỉnh lại chỗ này mới chạy được
    Visual C# Code:
    1. Result = null; -> Result = new(0,0,0,0);

    Và bị nhầm chỗ này
    Visual C# Code:
    1. Result = new Rectangle(left,right,w,h); -> Result = new Rectangle(left,top,w,h);

    À mà chưa có phần ko giao nhau nhỉ?
    tks bạn. bất cẩn quá.
    Never try, never know

Các đề tài tương tự

  1. Bài tập giải thuật Tính diện tích phần giao, không giao nhau của 2 Hình chữ nhật
    Gửi bởi ntk2991 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 1
    Bài viết cuối: 27-02-2013, 11:18 PM
  2. Bài tập C Nhập vào n phần tử cho mảng đến các số lẻ, sắp sếp mảng giảm dần.
    Gửi bởi englans trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 11-05-2012, 07:16 PM
  3. Nhà mạng bắt buộc phải chặn tin nhắn giả mạo
    Gửi bởi simdep2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 03-10-2011, 10:11 AM
  4. Thủ tục loại bỏ các phần tử trùng nhau, giữ lại duy nhất 1 phần tử trong DSLK
    Gửi bởi mrtyoffline trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-03-2011, 10:27 PM
  5. Tô màu phần giao nhau của 2 hình chữ nhật trong lập trình C#
    Gửi bởi neverland87 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 7
    Bài viết cuối: 05-06-2007, 04:31 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn