Рисование повернутого прямоугольника

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

com2sec notConfigUser    default          public

Сообщество определено только в строке com2sec, но больше нигде.

view    all           included   .1.3.6.1.4.1.x.y
view    all           included   .1.3.6.1.4.1.2021
view    all           included   .1                         80
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    systemview    included   .1.3.6.1.4.1

Определено одно представление для нескольких поддеревьев, но существует не больше представлений, чем «все» и «представление системы».

access  notConfigGroup ""      any       noauth    exact  all none none

notConfigGroup имеет доступ к представлению «все».

10
задан Community 8 February 2017 в 14:10
поделиться

5 ответов

Сначала преобразуйте центральную точку к 0,0

X' = X-x

Y' = Y-y

Затем вращайтесь для угла A

X'' = (X-x) *, потому что - (Y-y) * грешат A

Y'' = (Y-y) *, потому что + (X-x) * грешат A

Снова преобразуйте назад центральную точку к x, y

X''' = (X-x) *, потому что - (Y-y) * грешат + x

Y''' = (Y-y) *, потому что + (X-x) * грешат + y

Следовательно вычислите для всех 4 точек (X, Y) со следующим преобразованием

X''' = (X-x) *, потому что - (Y-y) * грешат + x

Y''' = (Y-y) *, потому что + (X-x) * грешат + y

где x, y являются центральными точками прямоугольника и X, Y являются вершинами, у Вас есть n't, определенный правильно даже вершины, когда Angle 0, поскольку я дал в комментариях.

После замены Вами доберется

UL  =  x + ( Width / 2 ) * cos A - ( Height / 2 ) * sin A ,  y + ( Height / 2 ) * cos A  + ( Width / 2 ) * sin A
UR  =  x - ( Width / 2 ) * cos A - ( Height / 2 ) * sin A ,  y + ( Height / 2 ) * cos A  - ( Width / 2 ) * sin A
BL =   x + ( Width / 2 ) * cos A + ( Height / 2 ) * sin A ,  y - ( Height / 2 ) * cos A  + ( Width / 2 ) * sin A
BR  =  x - ( Width / 2 ) * cos A + ( Height / 2 ) * sin A ,  y - ( Height / 2 ) * cos A  - ( Width / 2 ) * sin A

Я думаю, что это удовлетворяет Вашему решению.

26
ответ дан 3 December 2019 в 13:56
поделиться

Если 'тета' является против часовой стрелки углом вращения, то матрица вращения:

| cos(theta)  -sin(theta) |
| sin(theta)   cos(theta) |

т.е.

x' = x.cos(theta) - y.sin(theta)
y' = x.sin(theta) + y.cos(theta)

Если точка вращения не в источнике, вычтите центр вращения из своих исходных координат, выполните вращение как показано выше и затем включите центр вращения назад снова.

Существуют примеры других преобразований по http://en.wikipedia.org/wiki/Transformation_matrix

7
ответ дан 3 December 2019 в 13:56
поделиться

Матрица вращения (это становится FAQ),

3
ответ дан 3 December 2019 в 13:56
поделиться

Один из самых легких способов сделать это должно взять местоположение точки перед вращением и затем применить координатное преобразование. Так как это центрируется на (0,0), это - просто случай использования:

x' = x because(тета) - y тета sin()

y' = y because(тета) + x тета sin()

1
ответ дан 3 December 2019 в 13:56
поделиться

Посмотрите 2D вращение.

q = initial angle, f = angle of rotation.

x = r cos q 
y = r sin q

x' = r cos ( q + f ) = r cos q cos f - r sin q sin f 
y' = r sin ( q + w ) = r sin q cos f + r cos q sin f

hence:
x' = x cos f - y sin f
y' = y cos f + x sin f
2
ответ дан 3 December 2019 в 13:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: