Poj 1269

Intersecting Lines
簡(jiǎn)而言之就是求兩條線的關(guān)系开仰,平行众弓?重合隔箍?相交?如果相交的話求出交叉點(diǎn)蜒滩。
方式有很多種,有用向量的捡遍,有用斜率的竹握。其實(shí)這算是個(gè)水題,只不過(guò)需要考慮點(diǎn)邊界情況谓传。

代碼如下:

#include <math.h>
#include <stdio.h>

struct Point {
    double x;
    double y;
    
    bool operator==(const Point &other) const {
        return (x == other.x && y == other.y);
    }
};

/**
 * 假設(shè)直線方程為 y = kx + n
 **/
struct Line {
    struct Point a;
    struct Point b;
    
    bool isVertical() {
        return a.x == b.x;
    }
    
    // 這里需要注意直線情況
    double getSlope() {
        return (b.y - a.y)/(b.x - a.x);
    }
    
    double getSuffix() {
        return a.y - getSlope()*a.x;
    }
};

/**
 * 是否平行
 **/
bool isParallel(struct Line line1, struct Line line2) {
    double dxLine1 = line1.a.x - line1.b.x;
    double dyline1 = line1.a.y - line1.b.y;
    
    double dxLine2 = line2.a.x - line2.b.x;
    double dyline2 = line2.a.y - line2.b.y;
    
    if (0 == dxLine1) {
        return (0 == dxLine2);
    }
    
    return (dyline2*dxLine1 == dyline1*dxLine2);
}

/**
 * 是否是同一條直線
 **/
bool isInLine(struct Line line1, struct Line line2) {
    
    // 先計(jì)算是否平行续挟,不平行的線一定不會(huì)是同一條直線
    if(!isParallel(line1, line2)) {
        return false;
    }
    
    // 平行且過(guò)同一個(gè)點(diǎn)侥衬,則肯定是同一條直線
    if (line1.a == line2.a) {
        return true;
    }
    
    // 否則以 line1.a line2.a 構(gòu)造第三條線常侦,看是否與 line1 平行
    struct Line lineTmp = {line1.a, line2.a};
    return isParallel(line1, lineTmp);
}

struct Point intersectPoint(struct Line line1, struct Line line2) {
    struct Point point = {0, 0};
    if (line1.isVertical()) {
        point.x = line1.a.x;
        point.y = line2.getSlope()*point.x + line2.getSuffix();
    } else if (line2.isVertical()) {
        point.x = line2.a.x;
        point.y = line1.getSlope()*point.x + line1.getSuffix();
    } else {
        point.x = (line2.getSuffix() - line1.getSuffix())/(line1.getSlope() - line2.getSlope());
        point.y = line1.getSlope()*point.x + line1.getSuffix();
    }
    return point;
}

int main(int argc, const char * argv[]) {
    
    int turn = 0;
    scanf("%d", &turn);
    
    printf("INTERSECTING LINES OUTPUT\n");
    
    for (int i = 0; i < turn; i++) {
        struct Line line1, line2;
        scanf("%lf %lf %lf %lf", &line1.a.x, &line1.a.y, &line1.b.x, &line1.b.y);
        scanf("%lf %lf %lf %lf", &line2.a.x, &line2.a.y, &line2.b.x, &line2.b.y);
        
        if (isInLine(line1, line2)) {
            printf("LINE\n");
            continue;
        }
        
        if (isParallel(line1, line2)) {
            printf("NONE\n");
            continue;
        }
        
        struct Point point = intersectPoint(line1, line2);
        printf("POINT %.2lf %.2lf\n", point.x, point.y);
    }
    printf("END OF OUTPUT");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坡倔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罪塔,老刑警劉巖养葵,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異关拒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谐算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門洲脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剧包,“玉大人,你說(shuō)我怎么就攤上這事疆液。” “怎么了枚粘?”我有些...
    開(kāi)封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵馍迄,是天一觀的道長(zhǎng)攀圈。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赘来,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任嗦篱,我火速辦了婚禮幌缝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浴栽。我一直安慰自己,他們只是感情好典鸡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布萝玷。 她就那樣靜靜地躺著英遭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挖诸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天痴突,我揣著相機(jī)與錄音辽装,去河邊找鬼相味。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拓巧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播一死,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼承耿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冠骄!你這毒婦竟也來(lái)了加袋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蟀给,失蹤者是張志新(化名)和其女友劉穎跋理,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體前普,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡壹堰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年贱纠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆焊。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辖试,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呐馆,到底是詐尸還是另有隱情,我是刑警寧澤汹来,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布收班,位于F島的核電站遣耍,受9級(jí)特大地震影響炮车,放射性物質(zhì)發(fā)生泄漏酣溃。R本人自食惡果不足惜纪隙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一绵咱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艾恼,春花似錦、人聲如沸钠绍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赵誓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間架曹,已是汗流浹背闹瞧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留万牺,地道東北人洽腺。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓蘸朋,卻偏偏與公主長(zhǎng)得像核无,于是被迫代替她去往敵國(guó)和親团南。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪沙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Tutorial - 1 (a) 為什么e時(shí)代需要生物特征識(shí)別我們?cè)谛畔r(shí)代面臨諸多問(wèn)題,如病毒拷橘、黑客、計(jì)算機(jī)盜竊...
    ShellyWhen閱讀 2,216評(píng)論 0 4
  • 首頁(yè) 資訊 文章 資源 小組 相親 登錄 注冊(cè) 首頁(yè) 最新文章 IT 職場(chǎng) 前端 后端 移動(dòng)端 數(shù)據(jù)庫(kù) 運(yùn)維 其他...
    Helen_Cat閱讀 3,891評(píng)論 1 10
  • abbreviation 簡(jiǎn)寫符號(hào);簡(jiǎn)寫 absolute error 絕對(duì)誤差 absolute value 絕...
    滄海一睹閱讀 4,031評(píng)論 0 2
  • 聽(tīng)著民謠 世界安靜下來(lái) 心也沉寂 你會(huì)想到很多過(guò)往 這很奇特 是因?yàn)槊裰{獨(dú)特的旋律 還是因?yàn)楦枋知?dú)特的嗓音 或是民...
    野生鯨魚閱讀 130評(píng)論 0 0
  • 下雨的夜穷绵,格外的靜仲墨,只有風(fēng)聲和雨聲 下雨的夜,格外的美目养,沒(méi)有人群也沒(méi)有車子 在這樣的夜毒嫡,撐一把小紫傘 穿上一雙白色...
    是真的廢柴閱讀 236評(píng)論 0 1