У меня есть CanVas, в который я добавляю Sevral Rectangles.I могу добавить текст в прямоугольник, который выбран сейчас. Я также реализую Sevral Другие функции в выбранном прямоугольнике, как Drag Them, Resize them.But Теперь моя задача состоит в том, чтобы повернуть прямоугольник, который выбран сейчас. Может ли кто-нибудь предложить, как это сделать, чтобы мой изменяющий размер функционал также работал с вращением одновременно. Я хочу сделать это в JavaScript.Холст, множественный прямоугольник, вращение
0
A
ответ
0
Сохранить прямоугольник определения в JavaScript объекты & ставят Прямоугольник-объекты в массиве:
var rects=[];
rects.push({
x:50,y:50,
w:50,h:35,
color:'green',
angle:0,deltaAngle:(Math.PI*2)/60,
scale:100,scaleDirection:1}
);
rects.push({
x:150,y:50,
w:50,h:35,
color:'blue',
angle:0,deltaAngle:(Math.PI*2)/60,
scale:100,scaleDirection:1}
);
Затем вы можете сделать прямоугольники с вашими прообразами (перемещение, вращение, масштабирование) в наличии для следующего цикла :
Iterate массив и сделать каждый прямоугольник: for(var i=0; i<rects.length; i++)
- Сохранить untr ansformed context state.
- Перевести в центр прямоугольника. Происхождение [0,0] теперь находится в центральной точке прямоугольника.
- Шкала с заданным коэффициентом масштабирования.
- Повернуть на указанный угол.
- Нарисуйте прямоугольник. Поскольку начало координат находится в центре прямоугольника, смещение рисунка на -width/2, -height/2.
- Восстановить контекст к его нетрансформированному состоянию.
Иллюстрации результатов:
[Дополнение: получить угол мыши]
Вы можете получить угол мыши против центральной точки любого Rect как это:
var dx=mouseX-centerX;
var dy=mouseY-centerY;
var radianAngle=Math.atan2(dy,dx);
Смежные вопросы
- 1. Холст очищает незапрограммированный прямоугольник
- 2. Вращение вокруг произвольной точки: холст HTML5
- 3. О: вращение Прямоугольник и фитинга
- 4. Холст Изображение перегруппировка и вращение (в центре)
- 5. Холст HTML5 (Рисование (Прямоугольник) исчезает)
- 6. нарисовать прямоугольник через холст html5?
- 7. Как переместить прямоугольник в холст?
- 8. Холст, рисующий прямоугольник через MouseMove
- 9. Холст - вращение моих изображений (круги)
- 10. HTML Холст стирает прямоугольник сразу после рисования
- 11. Показать холст прямоугольник ниже ImageView и TextView
- 12. холст нарисовать округлый прямоугольник в обратном направлении?
- 13. Eclipse/SWT: Прямоугольник занимает весь холст
- 14. Холст поворачивает прямоугольник как большое колесо
- 15. HTML5 холст грязный прямоугольник Buggy Issue
- 16. HTML5 Холст, изменить прямоугольник после его создания
- 17. Удалить холст прямоугольник граничит отведение указателя мыши
- 18. используя холст, чтобы нарисовать прямоугольник внутри прямоугольника?
- 19. Простой холст Прямоугольник Взаимодействие с Javascript
- 20. html5 холст - эмулировать 3d вращение изображения
- 21. прямоугольник, нарисованный в другой точке, когда холст увеличен
- 22. как преобразовать холст код для рендеринга прямоугольник в svg
- 23. WPF: поверните прямоугольник и поместите его в холст
- 24. Html5 холст анимация. Как сбросить прямоугольник, когда он достиг цели
- 25. Вращение холста
- 26. Вращение прямоугольника
- 27. Правильно ли обрезается вращение?
- 28. Вращение glViewport?
- 29. C++/OpenGL - Вращение прямоугольника
- 30. Вращение координаты прямоугольника
,,,, Thanku Mark For Ваш ответ. Я делаю эту работу, когда вы предлагаете использовать массив и нажимать данные для разных прямоугольников ... Проблема в том, что мне нужно динамически поднять угол, и я не знаю, как получить это в JavaScript. У меня есть 8 точек вокруг каждого каждого Rectangle.Means Эти точки являются небольшими прямоугольниками с того места, где в событии мыши. Я хочу повернуть выбранный прямоугольник. Я новичок на этом сайте и не знаю, как показать вам мой код. –
Функция addRect (x, y, w, h, fill, text, FontSize, TextColor, TextFontFamily, Angle, ScaleWidth, ScaleHeight) { var rect = new Box2; rect.x = x; rect.y = y; rect.w = w rect.h = h; rect.Owntext = текст; rect.FontSize = FontSize; rect.TextColor = TextColor; rect.TextFontFamily = TextFontFamily; rect.Angle = Angle; rect.ScaleWidth = ScaleWidth; прямой.ScaleHeight = ScaleHeight; // оповещение (заполнение); rect.fill = fill; boxes2.push (rect); invalidate(); } –
функция mainDraw() { // alert ('MainDraw'); if (canvasValid == false) { clear (ctx); var l = box2.length; var font = 0; для (var i = 0; i