Разделение плоскости линией по двум точкам

Учитывая две точки с координатами xy, у меня есть указанная линия. Теперь я хочу отличить в двумерном массиве numpy точки слева от линии от тех, что справа.

Следующий код делает свое дело, но двойной цикл ранит мои религиозные чувства (по отношению к numpy). Должен быть более разумный способ?

def myline(a_x,a_y,b_x,b_y):
start=np.zeros((100,100))
for x in range(100):
    for y in range(100):
        val= (b_x - a_x)*(y - a_y) - (x - a_x)*(b_y - a_y)
        if val<=0:
            start[x,y]=1
return start

person Rriskit    schedule 08.12.2017    source источник


Ответы (1)


Это можно векторизовать с помощью ogrid:

x, y = np.ogrid[:100, :100]
start = (b_x - a_x)*(y - a_y) - (x - a_x)*(b_y - a_y) <= 0

Это даст вам логическую маску. Если вам нужен другой тип dtype

start = start.astype(np.int)
person Paul Panzer    schedule 08.12.2017