当前时讯:如何判定一个点是否在三角形内?判定方法是什么?
(资料图)
判定一个点是否在三角形内如何判定一个点P是否存在于指定的三角形ABC内,这肯定是一个简单的问题,本文仅用一个图形界面程序展示了该问题,有兴趣的朋友可以看看。(2008.07.24最后更新) 在此处使用一种常见且简便的方法:如果三角形PAB,PAC和PBC的面积之和与三角形ABC的面积相等,即可判定点P在三角形ABC内(包括在三条边上)。 可知,该方法的关键在于如何计算三角形的面积。幸运地是,当知道三角形顶点(A,B和C)的坐标((Ax, Ay),(Bx, By)和(Cx, Cy))之后,即可计算出其面积: S = |(Ax * By + Bx * Cy + Cx * Zy - Ay * Bx - By * Cx - Cy * Ax) / 2| 关键的代码如下, // 由给定的三个顶点的坐标,计算三角形面积。 // Point(java.awt.Point)代表点的坐标。 private static double triangleArea(Point pos1, Point pos2, Point pos3) {double result = Math.abs((pos1.x * pos2.y + pos2.x * pos3.y + pos3.x * pos1.y - pos2.x * pos1.y - pos3.x * pos2.y - pos1.x * pos3.y) / 2.0D ); return result; } // 判断点pos是否在指定的三角形内。 private static boolean inTriangle(Point pos, Point posA, Point posB, Point posC) {double triangleArea = triangleArea(posA, posB, posC); double area = triangleArea(pos, posA, posB); area += triangleArea(pos, posA, posC); area += triangleArea(pos, posB, posC); double epsilon = 0.0001 ; // 由于浮点数的计算存在着误差,故指定一个足够小的数,用于判定两个面积是否(近似)相等。 if (Math.abs(triangleArea - area) < epsilon) {return true ; } return false ; } 执行该应用程序,用鼠标在其中点击三次,即可绘制一个三角形,如下组图所示: 然后仅需移动鼠标,就会出现一个空心圆圈。如果圆圈的中心在三角内(包含在三条边上),则圆圈显示为红色;否则,显示为蓝色。如下组图所示: 完整代码如下: public class CanvasPanel extends JPanel {private static final long serialVersionUID = - 6665936180725885346L ; private Point firstPoint = null ; private Point secondPoint = null ; private Point thirdPoint = null ; public CanvasPanel() {setBackground(Color.WHITE); addMouseListener(mouseAdapter); addMouseMotionListener(mouseAdapter); } public void paintComponent(Graphics g) {super .paintComponent(g); drawTriangel(g); } private void drawTriangel(Graphics g) {if (firstPoint != null && secondPoint != null ) {g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); if (thirdPoint != null ) {g.drawLine(firstPoint.x, firstPoint.y, thirdPoint.x, thirdPoint.y); g.drawLine(secondPoint.x, secondPoint.y, thirdPoint.x, thirdPoint.y); } } } private static boolean inTriangle(Point pos, Point posA, Point posB, Point posC) {double triangeArea = triangleArea(posA, posB, posC); double area = triangleArea(pos, posA, posB); area += triangleArea(pos, posA, posC); area += triangleArea(pos, posB, posC); double epsilon = 0.0001 ; if (Math.abs(triangeArea - area) < epsilon) {return true ; } return false ; } private static double triangleArea(Point pos1, Point pos2, Point pos3) {double result = Math.abs((pos1.x * pos2.y + pos2.x * pos3.y + pos3.x * pos1.y - pos2.x * pos1.y - pos3.x * pos2.y - pos1.x * pos3.y) / 2.0D ); return result; } private MouseInputAdapter mouseAdapter = new MouseInputAdapter() {public void mouseReleased(MouseEvent e) {Point pos = e.getPoint(); if (firstPoint == null ) {firstPoint = pos; } else if (secondPoint == null ) {secondPoint = pos; Graphics g = CanvasPanel. this .getGraphics(); CanvasPanel. this .paintComponent(g); g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); } else if (thirdPoint == null ) {thirdPoint = pos; Graphics g = CanvasPanel. this .getGraphics(); CanvasPanel. this .paintComponent(g); g.drawLine(firstPoint.x, firstPoint.y, secondPoint.x, secondPoint.y); g.drawLine(firstPoint.x, firstPoint.y, thirdPoint.x, thirdPoint.y); g.drawLine(secondPoint.x, secondPoint.y, thirdPoint.x, thirdPoint.y); } } public void mouseMoved(MouseEvent e) {Point pos = e.getPoint(); Graphics2D g2 = (Graphics2D) CanvasPanel. this .getGraphics(); CanvasPanel. this .paintComponent(g2); if (firstPoint != null && secondPoint == null ) {g2.drawLine(firstPoint.x, firstPoint.y, pos.x, pos.y); } else if (firstPoint != null && secondPoint != null && thirdPoint == null ) {g2.drawLine(firstPoint.x, firstPoint.y, pos.x, pos.y); g2.drawLine(secondPoint.x, secondPoint.y, pos.x, pos.y); } else if (firstPoint != null && secondPoint != null && thirdPoint != null ) {if (inTriangle(pos, firstPoint, secondPoint, thirdPoint)) {g2.setColor(Color.RED); } else {g2.setColor(Color.BLUE); } int radius = 4 ; g2.drawOval(pos.x - radius, pos.y - radius, radius * 2 , radius * 2 ); } } }; } public class Triangle extends JFrame {private static final long serialVersionUID = 1L ; private CanvasPanel mainPanel = null ; public Triangle() {setTitle( " Triangle " ); setSize( new Dimension( 300 , 200 )); setResizable( false ); init(); Container container = getContentPane(); container.add(mainPanel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible( true ); } private void init() {mainPanel = new CanvasPanel(); } public static void main(String[] args) {new Triangle(); } }
还可参见一篇英文文章: http://www.blackpawn.com/texts/pointinpoly/default.html 好文章 ;-)
标签:
相关推荐:
精彩放送:
- []热点聚焦:WP7 SDK怎么下载?WP7SDK离线安装文件下载地址
- []环球聚焦:建站之星模板好吗?模板建站需要虚拟主机吗?
- []【聚看点】linux上支持的3G上网卡怎么用?3G上网卡使用方法
- []简讯:activemq控制台怎么看生产信息?NARS的生产日期保质期批号怎么看?
- []当前时讯:如何判定一个点是否在三角形内?判定方法是什么?
- []三星s5830i怎么刷机?三星s5830i详细刷机教程
- []全球微头条丨广交会创办67年来累计出口成交1.5万亿美元 参展结构与产品质量持续优化
- []U盘无法打开怎么办?banq u盘量产工具如何修复U盘丢失的数据?
- []职场新人必装的电脑软件有哪些?职场新人必备的电脑软件清单
- []当前速看:剑灵:剑士PVP怎么加点?PVP技能加点心得
- []资讯:上周楼市成交同环比均涨,宅地成交量倍增
- []世界简讯:不会跑代码怎么办?python3的代码帮你解决
- []即时看!百川股份:公司PMA产能为5万吨/年
- []天天快消息!川能动力:公司电力销售收入、锂电业务收入较上年同期增长较大
- []看热讯:港财政司陈茂波:消费券为市场注入200亿元
- []同达创业:截至2023年4月10日公司的股东数是14172
- []黄金出现技术性抛售,散户坚定看涨本周走势不动摇!
- []三立期货4月17日早间内参——能化
- []中航电测:本次重组工作正在有序推进中
- []ST华英说明申请撤销其他风险警示相关情况
- []【世界新视野】香港机票送赠计划内地即将开启,“五一”出境机票香港热度第一
- []天天新动态:5GWh!华电启动储能系统集采,电芯容量需≥280Ah
- []资金回流半导体板块 主题基金快速修复前期回撤
- []天天微速讯:上海动力电池循环利用中心揭牌 首批产线预计明年投产
- []【全球快播报】手机摔黑屏但是有声音修要多少钱_手机摔黑屏但是有声音
- []押中翻倍AI牛股 私募百万高薪招聘相关人才!
- []环球热门:蜂巢能源或将在欧洲建造5座动力电池工厂
- []当前观察:昆明:鼓励储能电池企业建设独立或共享储能电站,推进储能产业链上下游融合发展
- []焦点播报:中信证券:锂价或迎来阶段性止跌行情
- []陆家嘴集团挂牌转让上海仁耀置业65%股权 底价27.66亿元
- []河南济源:三孩以上家庭住房公积金贷款最高额度为80万元
- []天天最新:淮河能源:公司历次董事会的召集、召开程序符合《公司法》和《公司章程》的规定
- []世界百事通!博敏电子:股东买卖股票行为受多重因素影响,是股东的自主行为
- []天天快资讯丨广东:截至3月末住户贷款比年初增加1909亿元 同比多增370亿元
- []厦门国贸拟发行规模上限10亿元公司债 票面利率确定为4.25%
- []世界关注:克来机电:公司再融资和新投产计划会按照相关信息披露规定及时进行披露和公告,您可以持续关注公司后续公告
- []京华激光:制导方式主要分为自主制导、寻的制导、遥控制导和复合制导
- []快报:贝特瑞2022年负极材料销量超33万吨 正极材料收入逾103亿
- []环球热点评!软银再减持商汤5000万股 套现1.38亿港元
- []央行:推动房地产业向新发展模式平稳过渡
- []“关注公众号才能开发票”怎么破
- []3月房价环比全线上涨
- []微速讯:4月17日重点数据和大事件前瞻
- []每日时讯!想创业的项目_想创业什么项目好
- []【世界播资讯】驾驶员意外险怎么买
- []大病支付是什么意思
- []公积金封存时间怎么查询
- []保险到期退保险需要什么手续
- []天天速读:买保险的注意事项
- []环球聚焦:你值得拥有更好的_你值得拥有
- []头条:祥生集团发布讣告:创始人陈国祥离世 享年73岁
- []天天最资讯丨千亿房企创始人突然离世,“祥生接班人”接过债务重组重担
- []中南建设:控股股东完成协议转让7915万股 蒋振中成第二大股东
- []环球热讯:春光正好江西多处景区客流量回升
- []观点:越秀资本:股东广州产投参与转融通证券出借业务 出借股份约5017万股
- []【世界快播报】选购金属棉制品要注意什么 选购金属棉制品需要注意的东西
- []全球快资讯:3亿拿地!直播有风险,“薇娅”们盖楼能对冲风险吗?
- []热讯:宝宝满月是30天吗_宝宝满月是30天还是31天
- []环球快播:从飞机周转时间看美国大型航司的运营效率:美联航表现最佳,但与计划时间仍相差10%
- []新能源为何跌跌不休?公募还在坚守?上市公司一季报曝出实锤
- []李宇嘉:70城这一轮房价呈现普涨急涨,但后劲不足
- []祥生实业集团创始人陈国祥因病去世 享年73岁
- []今日讯!祥生集团创始人陈国祥去世
- []世界快播:政协江淮行|铜陵犁桥水镇五一开放 再现江南“梦里水乡”
- []热资讯!新能源股票有哪些
- []环球热资讯!上市公司增发股票是利好还是利空
- []股票ma是什么线
- []今日视点:入股10万退股能退多少
- []十个炒股九个亏的原因是什么
- []快资讯:没躲开“天坑专业”的年轻人
- []全球短讯!亚洲小格式狼_亚洲小格式
- []世界动态:连续多年亏损为什么没有st
- []货币型基金保本吗
- []天天即时看!股票开盘涨停能买进吗
- []每日简讯:恒盛能源是做什么的
- []环球今日讯!每10股转增4股是什么意思1
- []环球关注:楼市进一步出现积极变化
- []白银上市公司
- []全球今亮点!为什么解禁后股票大涨
- []人民币升值利好哪些股票板块
- []证券账户销户后果严重吗
- []当前讯息:解除质押股对股票有什么影响
- []边风炜:现在谈通缩有点早 资本市场或在今年走出小牛
- []快看点丨A股:券商股,股民等待的日子还要多长?
- []每日关注!AI炒股新纪元?头部量化私募幻方宣布全力探索人工智能应用
- []玩转地铁_关于玩转地铁介绍
- []红牛之父的中国心
- []全球热门:肾结石引起的腰痛症状_肾结石能引起腰痛吗
- []全球热讯:保险公司拒赔的几种情况
- []世界球精选!广州公积金比例
- []全球实时:学校保险怎么买
- []不可抗拒因素保险赔付吗
- []百事通!如何查看电子保单车险
- []世界新动态:使用Zuul实现静态资源管理
- []世乒赛冠军赛新乡站:孙颖莎加冕女单冠军
- []环球微头条丨北京存量建筑面积约2.45亿平方米 中心城区占比过半
- []焦点热门:给长辈送礼物送什么好
- []动态焦点:一粒麦子的长征
- []新动态:vivo手机怎么连接小米喷墨打印机_vivo手机怎么连接打印机
- []楼市春暖花开!一线涨二线涨三线也涨,3月全国房价普涨,什么信号?
- B站注册资本增幅400%至5亿 目前由陈睿全资持股
- 光源资本出任独家财务顾问 沐曦集成电路10亿元A轮融资宣告完成
- 巨轮智能2021年上半年营收11.24亿元 期内研发费用投入增长19.05%
- 红枣期货尾盘拉升大涨近6% 目前红枣市场总库存约30万吨
- 嘉银金科发布2021年Q2财报 期内净利润达1.27亿元同比增长208%
- 成都银行2021上半年净利33.89亿元 期内实现营收同比增长17.27亿元
- 汽车之家发布2021年第二季度业绩 期内新能源汽车品牌收入增长238%
- 中信银行上半年实现净利润290.31亿元 期末不良贷款余额706.82亿元
- 光伏概念掀起涨停潮交易价格创新高 全天成交额达1.29亿元
- 上半年生物药大增45% 关键财务指标好转营收账款持续下降
- 世界今亮点!金丹科技:为保证所有投资者公平地获取公司的信息,公司在定期报告中会披露对应时点的股东信息
- 世界视讯!万豪推出人才品牌;中东版“滴滴”融资4亿美元 | 大公司简报
- 【全球热闻】2023年中小企业网上招聘高校毕业生活动启动
- 58安居客研究院陆骑麟:3月份重点城市新房成交量同环比平均涨幅超40%
- 每日快播:北京土拍新规:同一集团成员企业不得同时报名竞买同一宗地
- 荣获“河南省省长质量奖”,仰韶交出“高质量”答卷!
- 世界热推荐:楼市重磅数据出炉!
- 天天微资讯!MIUI版本更新动态:小米时钟轻松掌握世界时间(第187期)
- 天天观天下!女鞋行业市场多大? 中国女鞋市场深度全景调研及投资前景分析报告2023
- 天天最新:要约收购是什么意思
- 世界播报:上一休一是什么意思
- 【世界速看料】业绩“能打” 半导体狂飙!基金经理的攻守道曝光
- 【天天新视野】新手怎么看懂股票
- 快资讯:四川新网银行股份有限公司是哪个网贷
- 掌证宝是正规平台吗
- 天天速讯:中科星图2022年净利2.43亿同比增长10.19% 总经理邵宗有薪酬77.55万
- 中科通达2022年营收3.91亿 董事长王开学薪酬35.66万
- 快看:盐源县气象台发布大风蓝色预警信号【IV级/一般】【2023-04-15】
- 【环球快播报】地产央企的“匀速马拉松”
- 环球新动态:华住决战中高端;马蜂窝选择做重 | 一周速览
- 3月70城房价出炉:64城新房价格环比上涨 武汉、昆明领涨
- 国家统计局:3月份各线城市商品住宅销售价格环比上涨
- 微头条丨数家房企投诉中建系多马甲拍地 北京火线出新规
- 3月70城房价公布:64城环比上涨,武汉涨1.3%领跑
- 全球今亮点!领涨全国!武汉3月新房价格环涨1.3%,人口1年猛增120万
- 兵役证用来干什么 兵役证有什么用
- 世界快资讯丨丽珠集团发布2022年财报,拟10派16元大手笔分红持续积极践行股东回报
- 吴通控股:公司董事长万卫方先生和荣耀董事长万飙先生不存在亲属关系
- 买SUV送MPV座椅!试驾魏牌蓝山DHT-PHEV
- 环球热文:“北交所一哥”年报出炉:贝特瑞2022年净利润增长超六成 正负极材料出货量齐升
- 世界快讯:史上规模最大广交会今日开幕;美团企业版发布,涵盖差旅服务 | 一周商旅动态
- 环球短讯!“冀”录乡愁丨好山好水好味道
- CFTC商品持仓解读:投机者减少黄金净多头头寸
- 天眼观消博·多彩黔品“走出去”⑧|黄果树“三碗粉”多向发力拓市场
- 天天快播:公积金怎么申请
- 住房公积金是啥
- 【焦点热闻】悟空保什么意思
- 环球动态:什么是大病保险
- 【世界播资讯】公积金干嘛用的
- 时讯:最快多久能测出怀孕_几天能测出怀孕
- 环球今热点:赣深高铁为什么没有吉安站(赣深高铁为什么不接入广州)
- 全球热推荐:五八有限公司已减持我爱我家2355.5万股 占总股本1%
- 环球微资讯!复星旅文太仓复游城订立墙面维修协议 总代价1912万
- 金逸影视2022年营收8.56亿元 归母净亏损3.81亿元
- 专题 | 行业深度洗牌下逆势发展的房企研究——中小房企成功补位的关键
- 王府井集团2022年净利润同比下降85.45%
- 宋都服务执行董事程华勇因其他业务承诺辞任
- 世界即时:雅化集团:公司生产安排需结合下游订单情况,随着客户需求的增加,将促进公司产能的释放
- 艾迪药业发布2022年年报:抗艾新药接连上市 商业化布局成效显现 艾邦德?销售放量
- 地产十年退市风波
- 全球短讯!格力地产70亿配股募资申请获上交所受理
- 世界微动态丨京北方:4月13日公司高管丁志鹏减持公司股份合计11.35万股
- 天天精选!京东汽车与美孚升级战略合作 产品、服务、渠道等多维升级消费体验
- 哈尔斯:公司预计在4月25日披露2023年一季度报告
- 环球热消息:中国金茂完成发行25亿元无担保中期票据 票面利率3.6%
- 宜华健康:宜华集团持有的61.01万股被处置 占总股本0.07%
- 全球聚焦:招商轮船:4月13日公司高管胡斌减持公司股份合计4万股
- 天天快资讯丨泰和科技:公司会按相关法律法规要求披露相关进展情况
- 海康威视2022年营收831.66亿净利128.37亿 研发费用98.14亿
- 中南建设因定增申请收到深交所审核问询函
- 热消息:映翰通:4月12日郑毅彬减持公司股份合计1.2万股
- 速看:长沙小伙接受代谢减重手术,还没出院就瘦了 16 斤
- 裕田中国出售秦皇岛奥特莱斯置业30%股权 代价120万美元
- 全球看点:财信发展:控股股东财信地产所持全部3.99亿股被司法冻结
- 财信发展股东贾启超、宋叶分别减持300万股、770万股
- 全球速读:新时达:公司严格按照相关法律、法规以及深交所的有关规定履行信息披露义务
- 招商商管签约鼎旺集团 承接佛山招商花园里商业项目
- 环球百事通!皇庭投资减持皇庭国际1514万股 减持比例1.26%
- 天天快看点丨德生科技:公司作为数据加工和运营服务商,内部有专门的大数据业务部
- 白血病人为什么会出现身上痒
- 马蜂窝五一趋势预测:长线游占比超80%,年轻人热衷“去有海的地方”
- 短讯!荣盛发展申请延期至4月21日前回复深交所增发审核问询函
- 当前信息:中骏集团再度偿债5亿美元 此前2022年已偿还境内外公开债务近115亿元
- 当前简讯:南宁富天所持南宁百货400万股被冻结 占总股本0.73%
- 观焦点:大丰文体旅新商业战略发布会在杭成功举办
- 拉芳家化起草并推动国内首个头皮微生态团体标准发布
- 简讯:长白山:公司在抖音、小红书等平台均有官方账号,抖音官方账号也有开展直播
- 【全球独家】良品铺子:2022年公司直营门店增加对销售费用中的人工成本有一定影响,并非影响销售费用变动的主要因素
- 当前观点:三湘印象:控股股东三湘控股减持股份达到1%
- 中骏集团:用于偿还2023年到期本金总额5亿美元优先票据资金已汇出
- 微动态丨五一未至旅游先火:多地酒店民宿提前售罄,出境跟团游满员待发
- 世界讯息:情暖“一老一小” “朝夕”无限美好
- 【天天播资讯】光伏电站的未来世界——固德威的“数智武器”
- 今日热文:充电仅需18秒!中科大研发出新型水系锌离子电池
- 36碳沙龙精彩回顾 | 电池风向,一“碳”究竟
- 当前讯息:竞争激烈!深圳共有近7000家储能企业
- 世界速讯:【风口研报】目前A股黄金板块估值仍处于相对安全的位置 这些标的还有机会?
- 天天简讯:中国金茂2023年第一期中期票据成功发行
- 每日讯息!卓越商管50亿中票注册发行获批复
- 房企融资持续回暖 卓越集团50亿中期票据注册获批
- 【当前热闻】全聚德:感谢您的关注和提问,平台星级受同品类门店市场竞争力不同而产生波动
- 全球快讯:桂发祥:公司下属子公司秦皇岛北戴河缤纷假日酒店有限公司涉及相关业务,目前在公司整体业务中占比较低
- 中骏集团坚守信用,再度偿债5亿美元
- 快报:富力地产一季度总销售收入约73.7亿元 3月销售收入约39.1亿元
- 科达利:如您已将相关股东身份证明文件发至公司邮箱,公司会在确认身份信息后作出相应
- 当前速递!双鹭药业:公司产品阿加曲班注射液中标省份为河南、陕西、湖南;奥硝唑注射液中标省份为重庆、内蒙、西藏
- 天天快消息!新西兰牛奶品牌纽麦福与叮咚买菜签署年度战略合作协议
- 兴储世纪 | 储能系统的分类及应用
- 天天资讯:豫能控股回答投资者问:2022年主营业务亏损主因是煤炭价格上涨
- 全球滚动:首份!阳光电源发布,事关光储系统电网技术