2017迅雷秋招笔试题-点是否在三角形内

解题方法:面积判断法

(图片来源:http://www.cnblogs.com/TenosDoIt/p/4024413.html)

如果p在三角形内ABC,三个小三角形面积等于原三角形,否则大于三角形

# -*- coding:utf-8 -*-

'''
编写程序,输入A,B,C,D四个点的坐标,
假设A,B,C三点可以构成一个三角形,判断D点是否落在三角形内。
'''

import sys
import math


def getArea(x1,y1,x2,y2,x3,y3):
    #根据三点坐标求三角形面积
    return abs(y1-y3)*abs(x2-x1)/2 + abs(x3-x1)* abs(y2-y3)/2-abs(x1 - x3)*abs(y1-y3)/2

def main():
    pointlist = map(float,raw_input().split(" "))
    x1=pointlist[0]
    y1=pointlist[1]
    x2=pointlist[2]
    y2=pointlist[3]
    x3=pointlist[4]
    y3=pointlist[5]

    px=pointlist[6]
    py=pointlist[7]

    SABC = getArea(x1,y1,x2,y2,x3,y3)   #原三角形
    SPAB = getArea(x1,y1,x2,y2,px,py)   #第一个小三角形
    SPAC = getArea(x1,y1,x3,y3,px,py)   #第二个小三角形
    SPBC = getArea(x2,y2,x3,y3,px,py)   #第三个小三角形

    if SABC==SPAB+SPAC+SPBC:
        print "yes"
    else:
        if SABC<SPAB+SPAC+SPBC:
            print "no"


if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值