Мне удалось решить проблему, используя только одно общедоступное сообщество по умолчанию, одного пользователя и одну группу. У группы должен быть доступ только к одному представлению с множественными определениями поддеревьев 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 имеет доступ к представлению «все».
Сначала преобразуйте центральную точку к 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
Я думаю, что это удовлетворяет Вашему решению.
Если 'тета' является против часовой стрелки углом вращения, то матрица вращения:
| 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
Один из самых легких способов сделать это должно взять местоположение точки перед вращением и затем применить координатное преобразование. Так как это центрируется на (0,0), это - просто случай использования:
x' = x because(тета) - y тета sin()
y' = y because(тета) + x тета sin()
Посмотрите 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