⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myline.java

📁 java 线段类..判断线段相交
💻 JAVA
字号:
/*
 * Created on 2007-10-10
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Melva
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.awt.Point;
import java.lang.Math;
import java.util.Scanner;

public class MyLine {
private Point e1;
private Point e2;
MyLine(Point p1,Point p2)
{
	e1=p1;
	e2=p2;
}

void check1quadrant()
{
    if(e1.x>0&&e1.y>0&&e2.x>0&&e2.y>0)
    System.out.println("线段位于第一象限");
    else
    System.out.println("线段不在第一象限");
}

public float length()
{
    return (float)java.lang.Math.sqrt((e1.x-e2.x)*(e1.x-e2.x)+(e1.y-e2.y)*(e1.y-e2.y));
}
void checkIntersect(Point p1,Point p2)
/*P1P2和Q1Q2相交的条件:
 * (P1-Q1)X(Q2-Q1)*(Q2-Q1)X(P2-P1)>=0
 * (Q1-P1)X(P2-P1)*(P2-P1)X(Q2-P1)>=0
 */
{
	int m,n,p,q;
	m=(p1.x-e1.x)*(e2.y-e1.y)-(e2.x-e1.x)*(p1.y-e1.y);
	n=(e2.x-e1.x)*(p2.y-e1.y)-(p2.x-e1.x)*(e2.y-e1.y);
	p=(e1.x-p1.x)*(p2.y-p1.y)-(p2.x-p1.x)*(e1.y-p1.y);
	q=(p2.x-p1.x)*(e2.y-p1.y)-(e2.x-p1.x)*(p2.y-p1.y);
	if((m*n>=0)&&(p*q>=0))
		System.out.println("两线段相交");
	else
		System.out.println("两线段不相交");
}
void distance(Point p)
{
	double ab,bc,ca,s,area,dis;
	ca=Math.sqrt((p.x-e1.x)*(p.x-e1.x)+(p.y-e1.y)*(p.y-e1.y));
	bc=Math.sqrt((e2.x-p.x)*(e2.x-p.x)+(e2.y-p.y)*(e2.y-p.y));
	ab=Math.sqrt((e1.x-e2.x)*(e1.x-e2.x)+(e1.y-e2.y)*(e1.y-e2.y));
	s=ab+bc+ca;
	area=Math.sqrt((s/2-ca)*(s/2-bc)*(s/2-ab)*s/2);
	dis=2*area/ab;
	System.out.println("点到线段的距离为"+(float)dis);
}
public static void main(String args[])
{
      	Scanner scanner = new Scanner(System.in);        
    	System.out.print("Please input 线段端点x1: ");
    	int x1=scanner.nextInt();
    	Scanner scanner2 = new Scanner(System.in);        
    	System.out.print("Please input 线段端点y1: ");
    	int y1=scanner2.nextInt();
    	Scanner scanner3 = new Scanner(System.in);        
    	System.out.print("Please input 线段端点x2: ");
    	int x2=scanner3.nextInt();
    	Scanner scanner4 = new Scanner(System.in);        
    	System.out.print("Please input 线段端点y2: ");
    	int y2=scanner4.nextInt();
    	        
    
    /*java.io.BufferedReader br = new java.io.BufferedReader
    (new java.io.InputStreamReader(System.in));
    int number=0;
    try
    {
    		    	
    		number=br.read();
    		  		
     }
    catch (Exception e)
    {}
    System.out.println(number);*/
    
    Point p1;
    Point p2;
    Point e1,e2;
    Point m;
    p1=new Point(x1,y1);
    p2=new Point(x2,y2);
    
    MyLine line=new MyLine(p1,p2);
    line.check1quadrant();
    System.out.println("两点间线段的长度:"+line.length());
 while(true)
 {  
 	System.out.print("选择方法:判断两线段是否相交输入1;求点到直线距离输入2:");	 
    Scanner scanner5 = new Scanner(System.in);        
    
    if (scanner5.nextInt()==1)
    {
    	Scanner scanner6 = new Scanner(System.in);        
    	System.out.print("Please input 另一条线段端点x1: ");
    	int xx1=scanner6.nextInt();
    	Scanner scanner7 = new Scanner(System.in);        
    	System.out.print("Please input 另一条线段端点y1: ");
    	int yy1=scanner7.nextInt();
    	Scanner scanner8 = new Scanner(System.in);        
    	System.out.print("Please input 另一条线段端点x2: ");
    	int xx2=scanner8.nextInt();
    	Scanner scanner9 = new Scanner(System.in);        
    	System.out.print("Please input 另一条线段端点y2: ");
    	int yy2=scanner9.nextInt();
    	e1=new Point(xx1,yy1);
    	e2=new Point(xx2,yy2);
    	line.checkIntersect(e1,e2);
    }
    if(scanner5.nextInt()==2)
    {
    	Scanner scanner10 = new Scanner(System.in);        
    	System.out.print("Please input 点的x: ");
    	int px=scanner10.nextInt();
    	Scanner scanner11 = new Scanner(System.in);        
    	System.out.print("Please input 点的y: ");
    	int py=scanner11.nextInt();
    	
    
    	m=new Point(px,py);
    	line.distance(m); 
    }
}
}
}
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -