Java
public static void main(String args[]){
double[] point1= new double[]{
0,0};
double[] point2 = new double[]{
2,2};
double[] point3 = new double[]{
0,2};
double[] point4 = new double[]{
2,0};
double[] node = cross(point1,point2,point3,point4);
if(node==null)System.out.println(false);
else System.out.println(node[0]+","+node[1]);
HashSet<String> set = new HashSet<>();
set.add(node[0]+":"+node[1]);
for(String item:set){
System.out.println(item);
}
}
public static double[] cross(double[] point1,double[] point2,double[] point3,double[] point4){
if((point2[1]-point1[1])*(point4[0]-point3[0])==(point4[1]-point3[1])*(point2[0]-point1[0]))return null;
if(point2[0]-point1[0]==0){
double k2 = (point4[1]-point3[1])/(point4[0]-point3[0]);
double b2 = point3[1]-point3[0]*k2;
double cross_x = point1[0];
double cross_y = k2*cross_x+b2;
return new double[]{
cross_x,cross_y};
}
if(point4[0]-point3[0]==0){
double k1 = (point2[1]-point1[1])/(point2[0]-point1[0]);
double b1 = point1[1]-point1[0]*k1;
double cross_x = point3[0];
double cross_y = k1*cross_x+b1;
return new double[]{
cross_x,cross_y};
}
double k1 = (point2[1]-point1[1])/(point2[0]-point1[0]);
double b1 = point1[1]-point1[0]*k1;
double k2 = (point4[1]-point3[1])/(point4[0]-point3[0]);
double b2 = point3[1]-point3[0]*k2;
double cross_x = (b1-b2)/(k2-k1);
double cross_y = k1*cross_x+b1;
return new double[]{
cross_x,cross_y};
}
JavaScript
function segmentsIntr(a, b, c, d){
var denominator = (b[1] - a[1])*(d[0] - c[0]) - (a[0] - b[0])*(c[1] - d[1]);
if (denominator==0) {
return false;
}
var x = ( (b[0] - a[0]) * (d[0] - c[0]) * (c[1] - a[1])
+ (b[1] - a[1]) * (d[0] - c[0]) * a[0]
- (d[1] - c[1]) * (b[0] - a[0]) * c[0] ) / denominator ;
var y = -( (b[1] - a[1]) * (d[1] - c[1]) * (c[0] - a[0])
+ (b[0] - a[0]) * (d[1] - c[1]) * a[1]
- (d[0] - c[0]) * (b[1] - a[1]) * c[1] ) / denominator;
if (
(x - a[0]) * (x - b[0]) <= 0 && (y - a[1]) * (y - b[1]) <= 0
&& (x - c[0]) * (x - d[0]) <= 0 && (y - c[1]) * (y - d[1]) <= 0
){
return [x,y]
}
return false
}