(某网络公司笔试题)判断一个点是否在三角形内
来源:互联网 发布:手机淘宝支付宝登陆 编辑:程序博客网 时间:2024/06/07 04:01
今天中午写的一个笔试题里的一个题目,算法思想有几种。
(图片来源:http://www.cnblogs.com/TenosDoIt/p/4024413.html)
题目:写一个程序判断点p是否在三角形内。
算法一:向量的叉乘
实现算法:向量的叉乘。
a x b = (^n) * |a| * |b| * sin<a, b>
a x b >0 说明ap与ab同向且在左侧
所以只要判断向量p与各定点组成的向量与abc两两组成的向量的叉乘是否都大于0即可。
实现代码:
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.ArrayList;//判断点是否在三角形内public class test2 { public static void main(String[] args) { ArrayList<Point> al = new ArrayList<Point>(); InputStreamReader isr = new InputStreamReader (System.in); BufferedReader br = new BufferedReader(isr); //输入各点坐标,放入al中 for(int i=0;i<4;i++) { try { double x=0; double y=0; if(i<3) { System.out.println("请输入三角形的一个顶点坐标:"); } else{ System.out.println("请输入点p的坐标:"); } System.out.println("x:"); String s_x=br.readLine(); x=Double.parseDouble(s_x); System.out.println("y:"); String s_y = br.readLine(); y=Double.parseDouble(s_y); Point u = new Point(x, y); al.add(u); } catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{ } } //创建三角形 Sanjiao abc = new Sanjiao(al.get(0), al.get(1), al.get(2)); if(checkInside(abc,al.get(3))) { //点在三角形里面 System.out.print("ok"); }else{ //点不在三角形里面 System.out.println("err"); } } //返回ab与ap的叉乘 public static double cross(Point a,Point b,Point p) { return ((b.x - a.x)*(p.y - a.y) - (b.y - a.y)*(p.x - a.x)); } //判断点是否在三角形里面 public static boolean checkInside(Sanjiao abc,Point p) { boolean b =false; //如果向量ab,ac,bc与ap,bp的叉乘大于0且三角形不是一条直线那么返回ture if(cross(abc.a,abc.b,p)>0&&cross(abc.a,abc.c,p)>0 &&cross(abc.b,abc.c,p)>0&&cross(abc.a, abc.b, abc.c)!=0) { b=true; } return b; }}//点坐标类class Point{ double x;double y;public Point(double x, double y){this.x=x;this.y=y;}}//组成三角形类class Sanjiao{Point a;Point b;Point c;public Sanjiao(Point a,Point b,Point c){this.a=a;this.b=b;this.c=c;}}
方法二:等面积法
实现算法:如果一个点在三角形内,其与三角形的三个点构成的三个子三角形的面积等于大三角形的面积。否则,大于大三角形的面积。
具体代码就不写了。
阅读全文
0 0
- (某网络公司笔试题)判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在三角形内
- 判断一个点是否在一个三角形内(二维)
- 判断一个点是否在一个三角形内(平面)
- 判断某点是否在三角形内
- 判断一个点是否在三角形内(面积法,三个点求三角形面积)
- 转载:判断一个点是否在一个三角形面内
- Algorithm: 如何判断一个点是否在一个三角形内
- Java 判断一个点是否在一个三角形内
- 一个判断点是否在三角形内的简单方法
- 如何判断一个点是否在三角形内
- 如何判断一个点是否在三角形内
- 判断一个点是否在 2D 三角形内
- TensorFlow图像数据处理
- JavaScript学习摘录(一)
- 基于Retrofit + RxJava的http请求的封装
- String,StringBuffer和StringBuilder
- 解决WordPress安装插件输入FTP账户信息
- (某网络公司笔试题)判断一个点是否在三角形内
- orange_17.09.18学习unity-菜单栏MenuItem
- TypeError: slice indices must be integers or None or have an index method
- three.js
- Java -- 集合Set
- 编译hadoop-eclipse插件并集成到eclipse中去
- MacOS 开发
- Druid数据连接池源码分析
- 【css3】js条件下多次触发同一个css3动画的解决方案