Получить радиусы x и y шестиугольника независимо от углаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получить радиусы x и y шестиугольника независимо от угла

Сообщение Anonymous »

Я создал размытие шестиугольника, которое дает такие результаты:
Изображение

Чтобы сделать код немного чище, я создал шестиугольный класс.
Сейчас внутри я реализую различные методы.
Мой конструктор сейчас выглядит следующим образом:
def __init__(self, radius, center_x, center_y, angle=0):
self._dmin = np.sqrt(3)/2

self._radius = radius
self._radius_min = radius * self.dmin
self._center_x = center_x
self._center_y = center_y

self._angle = angle # Angle in degrees
self._radian = np.radians(self.angle)

self._period = 60

Я остановился на методах radiusX и radiusY. Эти методы должны выдавать на выходе расстояние от центра до границы на основе текущего центра шестиугольника. Для radiusX с y в 0 и радиуса Y с x в 0.
Изображение
Я пробовал разные реализации, но на данный момент у меня есть более точная:
def radiusX(self) -> float:
return self.radius_min + Trigonometry.one2Zero2One(x=self.angle%self.period, period=self.period) * (self.radius - self.radius_min)

def radiusY(self) -> float:
return self.radius_min + Trigonometry.zero2One2Zero(x=self.angle%self.period, period=self.period) * (self.radius - self.radius_min)

Методы one2Zero2One() и zero2One2Zero() реализованы следующим образом:
@staticmethod
def one2Zero2One(x, period):
return 0.5 + 0.5 * np.cos(x * np.pi / (period / 2))

@staticmethod
def zero2One2Zero(x, period):
return 0.5 + 0.5 * np.sin(x * np.pi / (period / 2) - 1.58)

Они позволяют получить значение звонка от 0 до 1.
zero2One2Zero посмотрите на это:
Изображение

В моем классе шестиугольник с углом 0 находится в этом направлении:< /p>
Изображение

Я знаю это мои два метода не очень хороши, потому что, когда я визуализирую результаты с помощью графика, я сразу вижу, что радиус не соответствует кривым one2Zero2One и нуль2One2Zero. В примерах ниже сверху и справа есть зеленая точка, обозначающая конец радиусов x и y:
[img]https:/ /i.sstatic.net/Jfsecyv2.png[/img]

Изображение

Изображение

Изображение

[img]https://i .sstatic.net/oTzyufVA.png[/img]

Изображение

Изображение

Эта графика получена с:
h = Hexagon(radius=0.5, center_x=0.5, center_y=0.5, angle=j)
fig = go.Figure()
inside = {'x':[], 'y':[]}
outside = {'x':[], 'y':[]}
radius = {'x':[h.center_x + h.radiusX(), h.center_y], 'y':[h.center_y, h.center_y + h.radiusY()]}
print(h.radiusX())
for i in range(int(10e3)):
# print(i,'/',int(10e3))
x, y = random(), random()
if h.isPointInside(x, y):
inside['x'].append(x)
inside['y'].append(y)
else:
outside['x'].append(x)
outside['y'].append(y)

fig.add_trace(go.Scatter(x=inside['x'], y=inside['y'], mode='markers', name='Inside'))
fig.add_trace(go.Scatter(x=outside['x'], y=outside['y'], mode='markers', name='Outside'))
fig.add_trace(go.Scatter(x=radius['x'], y=radius['y'], mode='markers', name='radius', marker={'size':10}))
fig.show()

Каково правильное уравнение для получения радиуса X и радиуса Y на основе текущего угла шестиугольника?
РЕДАКТИРОВАТЬ решение реализации в Python:
Каково правильное уравнение для получения радиуса X и радиуса Y на основе текущего угла шестиугольника?
РЕДАКТИРОВАТЬ решение реализации в Python:
p>
def __instance__radiusX(self) -> float:
angl = self.angle % 60
return self.radius * np.cos(np.radians(30)) / np.cos(np.radians(30 - angl if angl > 30 else angl - 30))

@staticmethod
def radiusX(radius: int=1, angle: int=0) -> float:
angl = angle % 60
return radius * np.cos(np.radians(30)) / np.cos(np.radians(30 - angl if angl > 30 else angl - 30))

def __instance__radiusY(self) -> float:
angl = self.angle % 60
return self.radius * np.cos(np.radians(30)) / np.cos(np.radians(60 - angl if angl > 30 else angl))

@staticmethod
def radiusY(radius: int=1, angle: int=0) -> float:
angl = angle % 60
return radius * np.cos(np.radians(30)) / np.cos(np.radians(60 - angl if angl > 30 else angl))


Подробнее здесь: https://stackoverflow.com/questions/790 ... -the-angle
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получить радиусы x и y шестиугольника независимо от угла
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Получить радиусы x и y шестиугольника независимо от угла
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Получить радиусы x и y шестиугольника независимо от угла
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Эффект перехода начинается с ВЕРХНЕГО ЛЕВОГО угла, но нужно, чтобы он начинался с левого угла.
    Anonymous » » в форуме CSS
    0 Ответы
    80 Просмотры
    Последнее сообщение Anonymous
  • Ошибка при вычислении фазового угла с использованием графика углового угла.
    Anonymous » » в форуме Python
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»