Я хотел бы спросить, есть ли версия без проволочной сетки, я пытался использовать http://tulrich.com/geekstuff/canvas/perspective.html, но все равно не могу реализовать контрольную точку и нет проволочная сетка вместе. Спасибо!
Ссылка Нарисуйте искаженное изображение на холсте html5 Авторская версия
Но мне не нужны такие ответы, потому что мне нужно изображение перевернуть или поменять местами контрольные точки без проволочной сетки.
var triangle1 = new Triangle(
new Point(p1x-1, p1y),
new Point(p3x+2, p3y+1),
new Point(p4x-1, p4y+1),
new TextCoord(u1, v1),
new TextCoord(u2, v2),
new TextCoord(u1, v2)
);
var triangle2 = new Triangle(
new Point(p1x-2, p1y),
new Point(p2x+1, p2y),
new Point(p3x+1, p3y+1),
new TextCoord(u1, v1),
new TextCoord(u2, v1),
new TextCoord(u2, v2)
);
Я хотел бы спросить, есть ли версия без проволочной сетки, я пытался использовать http://tulrich.com/geekstuff/canvas/perspective.html, но все равно не могу реализовать контрольную точку и нет проволочная сетка вместе. Спасибо! Ссылка Нарисуйте искаженное изображение на холсте html5 Авторская версия Но мне не нужны такие ответы, потому что мне нужно изображение перевернуть или поменять местами контрольные точки без проволочной сетки. [code]var triangle1 = new Triangle( new Point(p1x-1, p1y), new Point(p3x+2, p3y+1), new Point(p4x-1, p4y+1), new TextCoord(u1, v1), new TextCoord(u2, v2), new TextCoord(u1, v2) );
var triangle2 = new Triangle( new Point(p1x-2, p1y), new Point(p2x+1, p2y), new Point(p3x+1, p3y+1), new TextCoord(u1, v1), new TextCoord(u2, v1), new TextCoord(u2, v2) ); [/code] Вот URL-адрес кода моей программы:
[code]var controls = [] var canvas var context var image var triangles = [] var dirtyTriangles = true
var rand = function(s, e) { return Math.random() * (e - s) + s }
if (dirtyTriangles) { dirtyTriangles = false calculateGeometry() }
for (triangle of triangles) { render(false, image, triangle) } }
var calculateGeometry = function() { // clear triangles out triangles = [] // generate subdivision var subs = 7 var divs = 7 const p1 = new Point( parseInt(controls[0].style.left) + 6, parseInt(controls[0].style.top) + 6, ) const p2 = new Point( parseInt(controls[1].style.left) + 6, parseInt(controls[1].style.top) + 6, ) const p3 = new Point( parseInt(controls[2].style.left) + 6, parseInt(controls[2].style.top) + 6, ) const p4 = new Point( parseInt(controls[3].style.left) + 6, parseInt(controls[3].style.top) + 6, )
var dx1 = p4.x - p1.x var dy1 = p4.y - p1.y var dx2 = p3.x - p2.x var dy2 = p3.y - p2.y
var imgW = image.naturalWidth var imgH = image.naturalHeight
for (var sub = 0; sub < subs; ++sub) { var curRow = sub / subs var nextRow = (sub + 1) / subs
var curRowX1 = p1.x + dx1 * curRow var curRowY1 = p1.y + dy1 * curRow
var curRowX2 = p2.x + dx2 * curRow var curRowY2 = p2.y + dy2 * curRow
var nextRowX1 = p1.x + dx1 * nextRow var nextRowY1 = p1.y + dy1 * nextRow
var nextRowX2 = p2.x + dx2 * nextRow var nextRowY2 = p2.y + dy2 * nextRow for (var div = 0; div < divs; ++div) { var curCol = div / divs var nextCol = (div + 1) / divs var dCurX = curRowX2 - curRowX1 var dCurY = curRowY2 - curRowY1 var dNextX = nextRowX2 - nextRowX1 var dNextY = nextRowY2 - nextRowY1 var p1x = curRowX1 + dCurX * curCol var p1y = curRowY1 + dCurY * curCol
var p2x = curRowX1 + (curRowX2 - curRowX1) * nextCol var p2y = curRowY1 + (curRowY2 - curRowY1) * nextCol
var p3x = nextRowX1 + dNextX * nextCol var p3y = nextRowY1 + dNextY * nextCol
var p4x = nextRowX1 + dNextX * curCol var p4y = nextRowY1 + dNextY * curCol var u1 = curCol * imgW var u2 = nextCol * imgW var v1 = curRow * imgH var v2 = nextRow * imgH
var triangle1 = new Triangle( new Point(p1x, p1y), new Point(p3x, p3y), new Point(p4x, p4y), new TextCoord(u1, v1), new TextCoord(u2, v2), new TextCoord(u1, v2), ) var triangle2 = new Triangle( new Point(p1x, p1y), new Point(p2x, p2y), new Point(p3x, p3y), new TextCoord(u1, v1), new TextCoord(u2, v1), new TextCoord(u2, v2), )
// Draw the whole image. Transform and clip will map it onto the // correct output triangle. // // TODO: figure out if drawImage goes faster if we specify the rectangle that // bounds the source coords. ctx.drawImage(im, 0, 0) ctx.restore() }
// point class
var Point = function(x, y) { this.x = x ? x : 0 this.y = y ? y : 0 }
var p = Point.prototype
p.length = function(point) { point = point ? point : new Point() var xs = 0, ys = 0 xs = point.x - this.x xs = xs * xs
Я хотел бы спросить, есть ли версия без проволочной сетки, я пытался использовать но все равно не могу реализовать контрольную точку и нет проволочная сетка вместе. Спасибо!
Ссылка Нарисуйте искаженное изображение на холсте html5 Авторская версия
Но...
Я пытаюсь трансформировать и/или перевернуть изображение. Однако в моей текущей реализации видна проволочная сетка, и я не знаю, как ее удалить.
Я пытался использовать Perspective.html, но я до сих пор не могу понять, что контрольная точка и...
Возможно ли, и если да, то как, рисовать изображения с четырьмя углами, искаженными до непрямоугольной формы. Например, если вы хотите нарисовать изображение так, как если бы оно было повернуто в трехмерном пространстве.
Прочитать изображение с диска (в моем случае PNG)
Нарисуйте в нем несколько фигур, например прямоугольников...
Отобразите полученное изображение в моем блокноте Jupyter, а также сохраните его обратно в файл
Я пытаюсь рисовать прямые линии с помощью холста и методаDetectDragGestures, но пока добился только хаотического поведения без каких-либо фиксаций. Я ищу решение, которое позволит мне всегда иметь прямые линии...