全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1223
推到 Plurk!
推到 Facebook!

請問矩形之間是否重疊之檢查

尚未結案
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-16 11:36:22 IP:211.74.xxx.xxx 未訂閱
我用亂數產生100~200個矩形 請問應如何檢查矩形之間是否重疊及標示出來 謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-16 12:40:43 IP:203.73.xxx.xxx 未訂閱
引言: 我用亂數產生100~200個矩形 請問應如何檢查矩形之間是否重疊及標示出來 謝謝
shing.net 你好:
(1)可以用 IntersectRect 這個 function 判斷矩形之間是否重疊,如果有重疊
   的話,也可以得到重疊的矩形
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27180
(2)得到重疊的矩形之後,你自己再把它畫成不同的顏色即可
(3)以 10 個矩形為例,範例程式碼如下
#define MAX_RECT 10
#include "Types.hpp"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Image1->Canvas->Brush->Color=clWhite;
   Image1->Canvas->FillRect(Image1->ClientRect);
   Image1->Canvas->Brush->Style=bsClear;
   TRect rtSrc[MAX_RECT];
   int iWidth=Image1->Width;
   int iHeight=Image1->Height;
   randomize();
   for(int i=0; irtSrc[i].Right)
      {
         iTemp=rtSrc[i].Left;
         rtSrc[i].Left=rtSrc[i].Right;
         rtSrc[i].Right=iTemp;
      }
      if(rtSrc[i].Top>rtSrc[i].Bottom)
      {
         iTemp=rtSrc[i].Top;
         rtSrc[i].Top=rtSrc[i].Bottom;
         rtSrc[i].Bottom=iTemp;
      }
      Image1->Canvas->Pen->Color=clBlack;
      Image1->Canvas->Rectangle(rtSrc[i]);
   }
   for(int i=0; iCanvas->Brush->Color=clRed;
            Image1->Canvas->Pen->Color=clRed;
            Image1->Canvas->Brush->Style=bsClear;
            Image1->Canvas->Rectangle(rtDst);
         }
      }
   }
}
(4)請再依照自己的需求,自行修改
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/04/16 13:28:08
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-16 12:57:28 IP:211.74.xxx.xxx 未訂閱
引言:
引言: 我用亂數產生100~200個矩形 請問應如何檢查矩形之間是否重疊及標示出來 謝謝
shing.net 你好:
(1)可以用 IntersectRect 這個 function 判斷矩形之間是否重疊,如果有重疊
   的話,也可以得到重疊的矩形
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27180
(2)得到重疊的矩形之後,你自己再把它畫成不同的顏色即可
-- Enjoy Researching & Developing --
謝謝你 因為矩形是亂數產生所以其重疊可能是連續三個以上 例如 矩形1與矩形2重疊,矩形2又與矩形3重疊...
bala0514
一般會員


發表:42
回覆:37
積分:15
註冊:2004-07-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-07 22:27:30 IP:140.135.xxx.xxx 未訂閱
引言:
引言: 我用亂數產生100~200個矩形 請問應如何檢查矩形之間是否重疊及標示出來 謝謝
shing.net 你好:
(1)可以用 IntersectRect 這個 function 判斷矩形之間是否重疊,如果有重疊
   的話,也可以得到重疊的矩形
   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27180
(2)得到重疊的矩形之後,你自己再把它畫成不同的顏色即可
(3)以 10 個矩形為例,範例程式碼如下
#define MAX_RECT 10
#include "Types.hpp"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Image1->Canvas->Brush->Color=clWhite;
   Image1->Canvas->FillRect(Image1->ClientRect);
   Image1->Canvas->Brush->Style=bsClear;
   TRect rtSrc[MAX_RECT];
   int iWidth=Image1->Width;
   int iHeight=Image1->Height;
   randomize();
   for(int i=0; irtSrc[i].Right)
      {
         iTemp=rtSrc[i].Left;
         rtSrc[i].Left=rtSrc[i].Right;
         rtSrc[i].Right=iTemp;
      }
      if(rtSrc[i].Top>rtSrc[i].Bottom)
      {
         iTemp=rtSrc[i].Top;
         rtSrc[i].Top=rtSrc[i].Bottom;
         rtSrc[i].Bottom=iTemp;
      }
      Image1->Canvas->Pen->Color=clBlack;
      Image1->Canvas->Rectangle(rtSrc[i]);
   }
   for(int i=0; iCanvas->Brush->Color=clRed;
            Image1->Canvas->Pen->Color=clRed;
            Image1->Canvas->Brush->Style=bsClear;
            Image1->Canvas->Rectangle(rtDst);
         }
      }
   }
}
(4)請再依照自己的需求,自行修改
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/04/16 13:28:08
不好意思!請教一下,若為圓或橢圓重疊,則要怎麼分割呢?謝謝 ***程式語言真是一門高深的學問***
------
***程式語言真是一門高深的學問***
系統時間:2024-07-08 1:32:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!