Я пытаюсь построить функцию, которая простирается от заданной c координаты до заданного угла и проходит по пикселям этой линии, пока не встретит черный пиксели.
Это легко реализовать, если угол составляет, например, 180 градусов. В этом случае поиск будет расширяться только вниз, добавляя 1 к координате столбца в каждой итерации. Однако угол, например, 10 градусов, является более сложным. Поэтому мне, вероятно, нужно математически рассчитать следующий пиксель в позиции пикселя X.
Этот ответ в аналогичном вопросе мне не помог, так как значения на оси у не меняются как ожидается:
import numpy as np
angle = 90*np.pi/180
x = np.arange(0, 10)
y = np.round(np.sin(angle)*x).astype(int)
print([(x, y) for x, y in zip(x, y)])
печатает: [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
Что неверно, поскольку я не ожидаю, что ось Y изменится, учитывая угол 90 градусов.
Ответ на этот другой вопрос требует второй 'конечной' координаты, которой у меня нет.
Наконец, я нашел этот вопрос , который, к сожалению, не имеет правильный ответ. Код в вопросе, кажется, не возвращает смещений, но плавает, значение которого я не уверен. Когда я округляю числа с плавающей точкой, смещения неправильны:
import numpy
def pol2cart(rotdist, cwangle):
x = rotdist * numpy.cos(cwangle)
y = rotdist * numpy.sin(cwangle)
return round(x), round(y)
print(pol2cart(1, 180))
печатает: (-1.0, -1.0)
, в то время как ожидаемый результат равен (1.0, 0.0)
Однако приведенный выше ответ также даст последовательное смещение при каждая итерация. Это приведет только к трем различным углам (горизонтальный, вертикальный и 45 градусов). Это , а не , что требуется, так как я получу другой угол, затем введу в функцию.
РЕДАКТИРОВАТЬ: Пример ввода
Ниже приведен пример данных изображения. Красная точка указывает на возможную стартовую позицию. Эта точка имеет направление, которое не указано. Если красная точка направлена прямо вниз, то ее направление составляет 180 градусов.
Вложенный словарь содержит координаты каждого пикселя (строка, столбец) и значения цвета: {1: {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 255, 8: 255,...