📄 myline.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 + -