線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1377
推到 Plurk!
推到 Facebook!

請教一個數學的問題…

尚未結案
superlarry
一般會員


發表:10
回覆:22
積分:6
註冊:2002-10-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-28 11:00:01 IP:163.28.xxx.xxx 未訂閱
請問一下… 在XY座標平面上… 有一個由四個點(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4)所連成的區域… 現在要如何判斷某點(A,B)是否落在這個區域內呢? 我記得以前是不是有個數學公式可以代進去求?? 我現在想到最笨的方法是把這四個點所連成的四條線求出來… 再分別判斷(A,B)是否在大於或小於這四條線… 再由判斷結果決定是否(A,B)在這個區域內! 不曉得大家有沒有更好的辦法?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-28 11:25:20 IP:61.30.xxx.xxx 未訂閱
提供一個很直覺的方法如下
int __fastcall TForm1::FindRange(int x1, int x2, int x3, int x4 ,bool Max)
{
    int iMaxTemp,iMinTemp;        if (Max)
    {
        iMaxTemp = max(x1,x2);
        iMaxTemp = max(iMaxTemp,x3);
        iMaxTemp = max(iMaxTemp,x4);
        return iMaxTemp;
    }
    else
    {
        iMinTemp = min(x1,x2);
        iMinTemp = min(iMinTemp,x3);
        iMinTemp = min(iMinTemp,x4);
        return iMinTemp;
    }    }
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int x1=1,x2=2,x3=3,x4=4,A=2;
    int y1=1,y2=2,y3=3,y4=4,B=2;
    int iXMax,iXMin,iYMax,iYMin;
    iXMax = FindRange(x1,x2,x3,x4,true);
    iXMin = FindRange(x1,x2,x3,x4,false);
    iYMax = FindRange(y1,y2,y3,y4,true);
    iYMin = FindRange(y1,y2,y3,y4,false);        if( A<=iXMax && A>=iXMin && B<=iYMax && B>=iYmin)
       找到了
}
發表人 - turboted 於 2003/05/28 12:13:17
superlarry
一般會員


發表:10
回覆:22
積分:6
註冊:2002-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-28 12:12:57 IP:163.28.xxx.xxx 未訂閱
可是這樣不是會有這種情形… --------- _\--------\.<-- __\--------\ ___\--------\ 那一點都在X.Y的最小和最大之間… 可是並不在範圍內啊! 發表人 - superlarry 於 2003/05/28 12:17:32 發表人 - superlarry 於 2003/05/28 12:18:22 發表人 - superlarry 於 2003/05/28 12:19:43
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-28 12:15:39 IP:210.241.xxx.xxx 未訂閱
看不太懂你的圖 能不能說明一下
superlarry
一般會員


發表:10
回覆:22
積分:6
註冊:2002-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-28 12:22:45 IP:163.28.xxx.xxx 未訂閱
圖會亂掉…改回來了!
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-28 12:46:08 IP:61.230.xxx.xxx 未訂閱
superlarry你好: 我是不曉得有沒有你要的方程式,我覺得你的原始方法已經很好用,即簡單又 不複雜,我以前也是這樣用,是用在三角形在。^^..不過我也在期待線性代數高手,發表更快的解決方法。
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-28 12:49:12 IP:61.30.xxx.xxx 未訂閱
請問您的四個基準點在什麼地方 我這樣看來,很明顯的那個點已經超過range
KCHong
一般會員


發表:1
回覆:2
積分:0
註冊:2003-05-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-28 14:04:31 IP:61.220.xxx.xxx 未訂閱
因為四邊形可以分為凸四邊形跟凹四邊形 除非能保證這個四邊形是凸四邊形 否則不能使用(x,y)的極大極小值來判斷 還是你要先判斷他是不是凸四邊形? 我認同
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-28 14:33:00 IP:61.30.xxx.xxx 未訂閱
hmm..看來需要將四個點代入,分別求出四個二元一次不等式 用來判定區域的範圍
superlarry
一般會員


發表:10
回覆:22
積分:6
註冊:2002-10-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-28 15:36:07 IP:163.28.xxx.xxx 未訂閱
我覺得不論是凹或凸四邊形… 都不能用X.Y座標的最大最小來判定是否落在區域內吧… 如下面這個圖的十字那個點… http://140.116.5.1/~f7488405/123.jpg 它都在X.Y座標的最大最小之間… 可是它並不在區域內…    嗯…還是很感謝大家的想法… 因為我隱隱約約記得國中還高中有個公式 把可以利用那四個點的
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-28 16:39:25 IP:210.241.xxx.xxx 未訂閱
我記得高中時,有用不等式去判斷 例如說 我現在四條線分別為 y>=3 y>=6 x-y<=0 x>=2 這四條線,就能畫出一個區 然後把你的點(X,Y)代如這四個式子 如果都能成立,就代表有在範圍內
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-28 19:19:28 IP:140.126.xxx.xxx 未訂閱
superlarry 你好,   這個問題 其實在電腦圖學裏是滿重要的問題, 有滿多方法可以解決的   建議你參考 Morgan Kaufmann Publishers 出版的一本書  書名是   "Geometric Tools for Computer Graphics", 裡面有滿多東西的...   最後, 如過你的問題 沒有很在乎效率... 你可以使用三角形判斷方法   因為你的問題只是四邊形 ...  如果是更多邊形... 就更麻煩了...   因為超過三個邊 就有所謂凸邊 或凹邊的問題... 而書上通常也是建議   將多邊形切成很多相連的三角形來判斷... 因此, 我給你的建議也是   如此... 然後用點是否在相連三角形內判斷的方法 來決定是否在你   指定的多邊形中... 發表人 -
------
不要忘記呼吸,不要忘記編程! ∩__∩
系統時間:2024-05-19 11:38:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!