opencv2 - Создание случайных вершин для типов треугольника - - PullRequest
0 голосов
/ 18 октября 2018

Я использую opencv2 для создания полигонов разных сторон.После других обсуждений я могу создать треугольник, квадрат, шестиугольник, пятиугольник и т. Д. С учетом радиуса и центра.Следующий код делает это:

def polygon(center, sides, radius=1, rotation=0, translation=None):
    one_segment = math.pi * 2 / sides

    points = [
        (int(round(center[0] + math.sin(one_segment * i + rotation) * radius, 0)),
         int(round(center[1] + math.cos(one_segment * i + rotation) * radius, 0)))
        for i in range(sides)]

    if translation:
        points = [[sum(pair) for pair in zip(point, translation)]
                  for point in points]

    return points

Возвращает набор вершин, которые можно использовать для создания изображения.Но, как я делаю неправильные треугольники.То есть создайте острый угловой треугольник, тупой треугольник, прямоугольный треугольник, равносторонний треугольник.

Как мы генерируем вершины заданного типа в диапазоне координат x и y, а также в области площади треугольника.Я понимаю, что треугольники не уникальны и могут быть много.Как только у нас есть очки, мы можем сделать изображение, используя:

def makePolygon(center, sides, radius):
    points = polygon(center, sides, radius)
    pointsList = [list(a) for a in points]
    p1 = np.array(pointsList)
    img = np.zeros((256, 256, 3), dtype='int32')
    cv2.fillPoly(img, pts =[p1], color=(255,0,0))
    return img
...