Java判断一个点是否在三角形内(随机函数的用法)

                                                           转载请注明出处:http://blog.csdn.net/sunquana/article/details/12061671

              Java判断一个点是否在三角形内(随机函数的用法)                 --------------By  sunquan

题目: 本程序通过随机产生一个三角形,然后从控制台输入一个点P,结果判断点P是否在三角形内。

思路:是根据点P计算三角形的面积,来判断点是否在三角形内部。

//package sunquan;

import java.math.*;
import java.util.*;

public class Triangle{

	public static void main(String args[]) {

		int[] x = new int[3];
		int[] y = new int[3];
		// 三角形3个点
		int px, py;
		Random r= new Random(30);//new 一个随机数对象给定种子(seed),如果两个种子相同产生的随机数序列相同

		for (int i = 0; i < 3; i++) {
			x[i] =r.nextInt(30);//[0,30)之间的整数
			y[i] = r.nextInt(30);
			//输出三角形的三个点
			System.out.print("x["+i+"]=="+x[i]+"   y["+i+"]=="+y[i]+"\n");
		}

		System.out.print("please input the point of P :\n");
		Scanner in = new Scanner(System.in);
		px = in.nextInt();
		py = in.nextInt();

		int Parea2 = 0;
		for (int i = 0; i < 3; i++)
			Parea2 += getArea(x[i] - px, y[i] - py, x[(i + 1) % 3] - px,
					y[(i + 1) % 3] - py);

		int area_ABC2 = getArea(x[1] - x[0], y[1] - y[0], x[2] - x[0], y[2] - y[0]);
		if (area_ABC2 == Parea2)
			System.out.print("点P在三角形内,因为"+area_ABC2+"=="+Parea2+"\n");
		else
			System.out.print("点P不在三角形内,因为"+area_ABC2+"!="+Parea2+"\n");

	}
   //计算三角形面积(这里是2倍)
	public static int getArea(int x1, int y1, int x2, int y2) {
		int area2 = (x1 * y2 - x2 * y1);
		return area2 < 0 ? -area2 : area2;
	}

}

测试结果:

下面画一幅图,来解释这个用例:


——————————我是低调的分割线————————————

下面说一下Java中随机函数的用法:

Java中其实存在着两种Random函数:

一、 java.lang.Math.Random;

Math.Random()函数是一个静态方法,(不能接收参数,默认种子为系统时间)能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。

for(int i=0;i<5;i++)
  {
      int rand=(int)(Math.random()*30);//需要强制转型为int
      System.out.println("num == "+rand);
  }

二、 java.util.Random;

在Java的API帮助文档中,总结了一下对这个Random()函数功能的描述:

1、 java.util.Random类中实现的随机算法是伪随机,默认种子(seed)的为系统当前时间,可自己设定一个种子(long类型);

2、相同种子数的Random对象,相同次数生成的随机数字是完全相同的;

3、Random类中各方法生成的随机数字都是均匀分布的;

Random r= new Random(30);//new 一个随机数对象给定种子(seed),如果两个随机数对象的两个种子相同, 那么产生的随机数序列相同

我们发现每次初次运行的三角形都相同,那是因为我们设定的随机数种子是个常量;

so我们一般不设定随机种子,直接默认为系统时间,那么每次运行的结果就不同了;
    Random r= new Random(30);//new 一个随机数对象给定种子(seed),如果两个种子相同产生的随机数序列相同

		for (int i = 0; i < 3; i++) {
			int num =r.nextInt(30);//[0,30)之间的整数
			System.out.print("num=="+num+"\n");
		}






  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Swing中,可以使用Java 2D API中的Area类来判断一个点是否在一个三角形内。具体步骤如下: 1. 创建一个Area对象,并将三角形的三个顶点作为参数传递给Area类的构造函数,这样Area对象就代表了这个三角形。 2. 创建一个Point2D.Double对象表示待判断的点。 3. 使用contains方法判断这个点是否在Area对象内部,如果在则返回true,否则返回false。 以下是示例代码: ``` import java.awt.geom.Area; import java.awt.geom.Path2D; import java.awt.geom.Point2D; public class TriangleContainsPoint { public static boolean contains(Point2D.Double point, Point2D.Double p1, Point2D.Double p2, Point2D.Double p3) { Path2D.Double path = new Path2D.Double(); path.moveTo(p1.x, p1.y); path.lineTo(p2.x, p2.y); path.lineTo(p3.x, p3.y); path.closePath(); Area area = new Area(path); return area.contains(point); } public static void main(String[] args) { Point2D.Double p1 = new Point2D.Double(0, 0); Point2D.Double p2 = new Point2D.Double(5, 0); Point2D.Double p3 = new Point2D.Double(2.5, 5); Point2D.Double point = new Point2D.Double(2, 2); boolean contains = contains(point, p1, p2, p3); System.out.println(contains); } } ``` 在上面的示例代码中,contains方法接收一个待判断的点和三角形的三个顶点,首先创建一个Path2D.Double对象表示这个三角形,然后使用Area类将这个Path2D.Double对象转换成一个Area对象,最后使用Area类的contains方法判断判断的点是否在Area对象内部。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值