青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

uva 10112 - Myacm Triangles

   這是一個幾何題。題意是給出一系列點,點最多才15個,求一個這里面的三個點組合出來的三角形,其面積是最大的,而且沒有任何其它
的點在這個三角形的內部和邊界上。求三角形的面積,題目上面已經給了公式,也可以用0.5*|a|*|b|*sin(a,b)求,這里的a和b指的是2條
邊代表的向量。
   現在就剩下一個問題了,怎么判斷一個點在三角形的內部和邊界上。在邊界上,比較好判斷,判斷是否共線,然后再點是在線段的內部。
具體說明下,判斷一個點在三角形內部的思路。我用的還是線性規劃的思想。如果該點在三角形的內部,那么任取三角形的一條邊,
該內部點和剩余的三角形的一個頂點必定在三角形的那條的邊的同一側。
這個方法也可以推廣到N邊的凸多邊形,證明的話很簡單,
因為線性規劃一直在劃分區域。所以,劃分到最后圍起來的區域就是凸多邊形的內部了。
   至于寫代碼的話,由于是第一次寫這種幾何題,寫得很凌亂。

   代碼如下:
#include <stdio.h>
#include <math.h>

#define MAX (20)
int nN;
struct Point
{
    char szLabel[5];
    int x;
    int y;
};
Point points[MAX];

//三點是否共線
bool IsOneLine(int nOne, int nTwo, int nThree)
{
    int nA = points[nTwo].x - points[nOne].x;
    int nB = points[nTwo].y - points[nOne].y;
    int nC = points[nThree].x - points[nOne].x;
    int nD = points[nThree].y - points[nOne].y;
    
    return (nA * nD == nB * nC);
}

//點nOne和點nTwo是否在直線(nBeg,nEnd)的同一側(不能在直線上)
bool IsSameSide(int nBeg, int nEnd, int nOne, int nTwo)
{
    //求直線的向量
    int nA = points[nBeg].x - points[nEnd].x;
    int nB = points[nBeg].y - points[nEnd].y;
    
    //直線方程為nB(x - points[nBeg].x) - nA(y - points[nBeg].y) = 0
    
//分別用nOne和nTwo的坐標代入直線方程計算結果,然后將結果相乘
    
//乘積必須大于0
    int nRes = (nB * (points[nOne].x - points[nBeg].x) - nA * (points[nOne].y - points[nBeg].y))
    * (nB * (points[nTwo].x - points[nBeg].x) - nA * (points[nTwo].y - points[nBeg].y));
    
    if (nRes > 0)
    {
        //printf("點:%d,點:%d,在直線nBeg:%d, nEnd:%d的同一側\n", nOne, nTwo, nBeg, nEnd);
    }
    return nRes > 0;
}

//點是否在三角形(nOne, nTwo, nThree)外部
bool PointOutTriangle(int nOne, int nTwo, int nThree, int nPoint)
{
    //前面3個ifelse是判斷點是否在邊上
    if (IsOneLine(nOne, nTwo, nPoint))
    {
        if ((points[nOne].x - points[nPoint].x) * (points[nTwo].x - points[nPoint].x) <= 0)
        {
            return false;
        }
    }
    else if (IsOneLine(nOne, nThree, nPoint))
    {
        if ((points[nOne].x - points[nPoint].x) * (points[nThree].x - points[nPoint].x) <= 0)
        {
            return false;
        }
    }
    else if (IsOneLine(nTwo, nThree, nPoint))
    {
        if ((points[nTwo].x - points[nPoint].x) * (points[nThree].x - points[nPoint].x) <= 0)
        {
            return false;
        }
    }
    
    //下面的IsSameSide如果nPoint在直線的(nOne,nTwo)的外側也會判斷為假
    
//所以需要先在上面判斷點是否在邊的內側
    return !(IsSameSide(nOne, nTwo, nThree, nPoint)
    && IsSameSide(nOne, nThree, nTwo, nPoint)
    && IsSameSide(nTwo, nThree, nOne, nPoint));
}

bool IsValid(int nOne, int nTwo, int nThree)
{
    if (IsOneLine(nOne, nTwo, nThree))
    {
        //printf("點:%d,%d,%d共線\n", nOne, nTwo, nThree);
        return false;
    }
    
    for (int i = 0; i < nN; ++i)
    {
        if (i == nOne || i == nTwo || i == nThree)
        {
            continue;
        }

        if (!PointOutTriangle(nOne, nTwo, nThree, i))
        {
            //printf("點:%d, 在三角形:%d,%d,%d內部\n", i, nOne, nTwo, nThree);
            return false;
        }
    }
    
    return true;
}

//計算三角形(nOne, nTwo, nThree)的面積
double GetArea(int nOne, int nTwo, int nThree)
{
    return 0.5 * fabs((points[nThree].y - points[nOne].y) * (points[nTwo].x - points[nOne].x)
    - (points[nTwo].y - points[nOne].y) * (points[nThree].x - points[nOne].x));
}

int main()
{
    while (scanf("%d", &nN), nN)
    {
        for (int i = 0; i < nN; ++i)
        {
            scanf("%s%d%d", points[i].szLabel, &points[i].x, &points[i].y);
        }
        
        double fMaxArea = 0.0;
        int nI = -1, nJ = -1, nK = -1;
        for (int i = 0; i < nN - 2; ++i)
        {
            for (int j = i + 1; j < nN - 1; ++j)
            {
                for (int k = j + 1; k < nN; ++k)
                {
                    if (IsValid(i, j, k))
                    {
                        //printf("i:%d,j:%d,k:%d valid\n", i, j, k);
                        double fArea = GetArea(i, j, k);
                        //printf("Area:%f\n", fArea);
                        if (fArea > fMaxArea)
                        {
                            nI = i;
                            nJ = j;
                            nK = k;
                            fMaxArea = fArea;
                        }
                    }
                }
            }
        }
        printf("%s%s%s\n", points[nI].szLabel, points[nJ].szLabel, points[nK].szLabel);
    }
    
    return 0;
}

posted on 2012-05-07 14:07 yx 閱讀(1291) 評論(0)  編輯 收藏 引用 所屬分類: 數學題

<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产精品日韩| 中文日韩在线| 亚洲一区精品电影| 亚洲二区视频在线| 久久九九精品99国产精品| 91久久精品国产91性色| 最新国产拍偷乱拍精品 | 久久久精品tv| 亚洲香蕉在线观看| 亚洲一区二区视频| 一区二区三欧美| 亚洲作爱视频| 99精品视频免费在线观看| 亚洲激情偷拍| 一区二区三区毛片| 亚洲免费影视| 久久国产精品久久国产精品| 亚洲一区在线观看视频 | 男人的天堂亚洲在线| 欧美成年人网站| 亚洲欧美精品| 欧美国产在线观看| 国产精品户外野外| 国产欧美日韩激情| 欧美日韩精品在线视频| 国产精品家教| 亚洲欧洲精品一区二区三区不卡| 亚洲视频网在线直播| 久久综合色88| 亚洲一区图片| 老色批av在线精品| 欧美日韩亚洲在线| 国产精品稀缺呦系列在线| 国产一区日韩欧美| 日韩视频永久免费| 欧美一级理论性理论a| 玖玖视频精品| 99精品国产在热久久| 欧美亚洲免费电影| 欧美日韩另类国产亚洲欧美一级| 欧美揉bbbbb揉bbbbb| 亚洲无玛一区| 久久久久久久尹人综合网亚洲| 久久久欧美一区二区| 欧美一区二区免费| 夜夜夜精品看看| 日韩视频在线一区| 美女日韩在线中文字幕| 欧美日韩成人一区二区三区| 国产午夜精品理论片a级大结局| 在线成人免费视频| 久久香蕉国产线看观看网| 一区二区三区偷拍| 欧美日韩国产色综合一二三四| 欧美日韩mv| 一区二区三区产品免费精品久久75 | 亚洲欧美日韩国产综合| 毛片基地黄久久久久久天堂| 欧美成人精品一区| 日韩一区二区电影网| 亚洲欧美清纯在线制服| 欧美性猛交99久久久久99按摩| 91久久国产综合久久91精品网站| 久久精品九九| 久久亚洲高清| 日韩视频中文字幕| 一本色道精品久久一区二区三区 | 99精品视频一区二区三区| 麻豆精品91| 欧美不卡一卡二卡免费版| 最新亚洲电影| 亚洲欧美国产视频| 怡红院精品视频| 亚洲国产欧美一区二区三区同亚洲| 久久婷婷综合激情| 亚洲一级在线| 欧美成人在线免费观看| 欧美一区二区在线播放| 欧美电影资源| 久久在线视频在线| 亚洲免费观看在线视频| 六月婷婷一区| 欧美中文字幕| 欧美午夜不卡| 欧美在线视频一区二区三区| 久久资源在线| 欧美一级视频| 欧美午夜影院| 亚洲精品美女在线| 亚洲欧洲日本国产| 久久综合99re88久久爱| 亚洲午夜av在线| 欧美色图首页| 在线视频一区二区| 一区二区三区欧美成人| 欧美日韩成人网| 国产麻豆成人精品| 亚洲精品久久久久久久久久久| 亚洲高清视频的网址| 久久亚洲高清| 亚洲国产精品传媒在线观看| 在线成人激情黄色| 亚洲欧美一区二区原创| 欧美日韩在线播放| 欧美精品三级日韩久久| 欧美a级在线| 亚洲最新在线视频| 国产女主播一区二区| 亚洲全黄一级网站| 亚洲欧美日韩一区在线观看| 国产精品美女久久久浪潮软件| 日韩一级大片在线| 久久久天天操| 国产有码一区二区| 欧美精品在线一区二区| 欧美一区二区啪啪| 亚洲素人在线| 亚洲国产精品热久久| 欧美在线一级视频| 在线午夜精品自拍| 欧美午夜理伦三级在线观看| 欧美中在线观看| 亚洲午夜精品视频| 亚洲精品国产精品国产自| 亚洲激情视频在线| 海角社区69精品视频| 国产精品高潮呻吟视频| 欧美在线观看一区二区三区| 午夜亚洲福利在线老司机| 亚洲精品乱码久久久久久日本蜜臀| 欧美视频网站| 欧美日韩mv| 欧美日韩国产精品成人| 欧美中文字幕在线观看| 一区二区三区产品免费精品久久75 | 性久久久久久久| 欧美激情麻豆| 亚洲国产乱码最新视频| 欧美va亚洲va日韩∨a综合色| 久久精品国产免费看久久精品| 欧美日韩蜜桃| 国产精品女同互慰在线看| 国产精品99一区二区| 国产精品国产三级国产aⅴ9色| 久久精品水蜜桃av综合天堂| 久久久999国产| 欧美精品亚洲二区| 国产日韩欧美不卡在线| 国产亚洲成人一区| 亚洲第一页中文字幕| 91久久在线播放| 亚洲欧美视频在线观看视频| 精品成人免费| 国产视频久久网| 亚洲精品一区在线观看| 欧美一区二区三区日韩视频| 久久久久久久国产| 日韩一本二本av| 亚洲最快最全在线视频| 久久蜜臀精品av| 亚洲精选中文字幕| 免费亚洲视频| 国产精品99久久久久久有的能看| 亚洲国产精品成人一区二区| 久久久久久网址| 亚洲免费高清| 亚洲一区免费观看| 亚洲大胆美女视频| 91久久久久久久久| 国产精品黄色在线观看| 午夜精品久久久久影视| 亚洲嫩草精品久久| 国产亚洲欧美一区| 亚洲国产专区校园欧美| 欧美日韩另类国产亚洲欧美一级| 亚洲欧美视频一区二区三区| 久久成人羞羞网站| 亚洲网站在线| 两个人的视频www国产精品| 亚洲欧美精品中文字幕在线| 亚洲人www| 欧美人交a欧美精品| 久久久久久久久久码影片| 久久久久久久成人| 欧美成人一区二区三区片免费| 亚洲一二三区在线观看| 久久青青草综合| 欧美亚洲一区二区三区| 欧美视频在线视频| 91久久精品国产91性色| 在线看无码的免费网站| 欧美影视一区| 午夜精品久久久久久久蜜桃app| 欧美激情精品久久久| 亚洲电影下载| 欧美在线观看一区二区| 午夜国产精品视频免费体验区| 美女主播精品视频一二三四| 蜜臀91精品一区二区三区| 国产婷婷成人久久av免费高清|