检查两个点(x1,y1)和(x2,y2)是否位于给定线的同一侧
给定三个整数a,b和c,其表示线a * x + b * y -c = 0的等式的系数。给定两个整数点(x1,y1)和(x2,y2)。任务是确定点(x1,y1)和(x2,y2)是否位于给定线的同一侧。
例子:
输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 1,y2 = 2
输出:是
在* x +上应用(x1,y1)和(x2,y2) b * y - c,分别给出1和2两者具有相同的符号,因此两个点都位于该行的同一侧。
输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 0,y2 = 0
输出:否
------------------------------------------------------------------------------------------------------------
下面这个是我写的:
public class Xyxy {
/**
检查两个点(x1,y1)和(x2,y2)是否位于给定线的同一侧
给定三个整数a,b和c,其表示线a * x + b * y -c = 0的等式的系数。给定两个整数点(x1,y1)和(x2,y2)。任务是确定点(x1,y1)和(x2,y2)是否位于给定线的同一侧。
例子:
输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 1,y2 = 2
输出:是
在* x +上应用(x1,y1)和(x2,y2) b * y - c,分别给出1和2两者具有相同的符号,因此两个点都位于该行的同一侧。
输入: a = 1,b = 1,c = 1,x1 = 1,y1 = 1,x2 = 0,y2 = 0
输出:否
*/
public static void main(String[] args) {
int a = 1,b=1,c=1,x1=1,y1=1,x2=0,y2=0;
int i1 = test(x1, y1, a, b, c);
int i2 = test(x2, y2, a, b, c);
//if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0)||(i1 == 0 && i2 == 0)){//我之前以为点都在线上也为同一侧
if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0)){
System.out.println("是");
}else{
System.out.println("否");
}
}
private static int test(int x ,int y,int a,int b,int c){
int i = a * x + b * y -c;
return i;
}
}
网上的答案:
public class GFG1 {
// Function to check if two points
// lie on the same side or not
static boolean pointsAreOnSameSideOfLine(int a, int b,
int c, int x1,
int y1, int x2,
int y2)
{
int fx1; // Variable to store a * x1 + b * y1 - c
int fx2; // Variable to store a * x2 + b * y2 - c
fx1 = a * x1 + b * y1 - c;
fx2 = a * x2 + b * y2 - c;
// If fx1 and fx2 have same sign
if ((fx1 * fx2) > 0)
return true;
return false;
}
// Driver code
public static void main(String[] args)
{
int a = 1, b = 1, c = 1;
int x1 = 1, y1 = 1;
int x2 = 2, y2 = 1;
if (pointsAreOnSameSideOfLine(a, b, c, x1, y1, x2, y2))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed by 29AjayKumar
小知识:两个正数或者负数相乘结果一定大于0 所以我上面使用的判断//if((i1 > 0 && i2 > 0)||(i1 < 0 && i2 < 0))
需要优化