?? 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 + -