在python中,一条给定的直线(等式)是否能够成功地将两个点列表分开

2024-09-26 22:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,明确要求我不要使用numpy或熊猫

问题:

以元组列表的形式给出两组数据点,如

Red =[(R11,R12),(R21,R22),(R31,R32),(R41,R42),(R51,R52),..,(Rn1,Rn2)]
Blue=[(B11,B12),(B21,B22),(B31,B32),(B41,B42),(B51,B52),..,(Bm1,Bm2)]

和一组直线方程(字符串格式,即字符串列表)

^{pr2}$

注意:你需要在这里进行字符串解析,得到x,y和截距的系数。在

你在这里的任务是打印出“是”/“否”的每一行。如果所有的红点都在这条线的一边,而蓝点在这条线的另一边,你应该打印“是”,否则你应该打印“否”

Ex:

Red= [(1,1),(2,1),(4,2),(2,4), (-1,4)]
Blue= [(-2,-1),(-1,-2),(-3,-2),(-3,-1),(1,-3)]
Lines=["1x+1y+0","1x-1y+0","1x+0y-3","0x+1y-0.5"]


Output:
YES
NO
NO
YES

从数学上讲,你取这条线的方程,比如S

Suppose S(x)(y) = 1x+1y+0

Now take points (1,1) and (-6,-1)

S(1)(1) = 1(1)+ 1(1) = 2 >0

S(-6)(-1) = 1(-6)+(1)(-1) = -7 <0

因此,我们可以得出结论:(1,1)和(-6,-1)位于S线的不同侧面

在给定的问题中,给定一个方程,所有的红色应该在方程的一边,蓝色的在另一边。在

这里的问题是,我不确定如何使用python替换以字符串形式给出的等式中列表中的点的值。在

另外,我还没有想出一个逻辑(如何根据我们的需求使用循环)来解决上面的问题。在

希望能对这个问题有深入的了解。提前谢谢。在


Tags: 数据no字符串numpy列表bluered形式
3条回答

Python3程序检查两个点是否位于同一侧

def pointsAreOnSameSideOfLine(a, b, c, x1, y1, x2, y2): 
fx1 = 0 # Variable to store a * x1 + b * y1 - c 
fx2 = 0 # 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

驾驶员代码

^{pr2}$

假设你的字符串总是

ax+by+c

(按这个顺序),你可以写

^{pr2}$

使用您的_字符串。替换()和eval()函数, 将x和y字符替换为它的值, eval()将字符串作为表达式执行

for element in red:
    equation=line.replace('x','*'+str(element[0]))
    equation=equation.replace('y','*'+str(element [1]))
    result=eval(equation)
    if result > 0:
        pass
    else:
        return "NO"
#code for blue
return "Yes"

相关问题 更多 >

    热门问题