У меня есть несколько слов. Все слова в некотором короле «объекта». Эти слова могут перемещаться по холсту, и мне нужно получить массив всех пересечений, как в этом примере, но без необходимости преобразования текста в SVG. paperjs.org/examples/path-intersections Спасибо.Html5 перекрестки текста холста
2
A
ответ
5
Вы можете обнаружить все точки пересечения между двумя словами, сравнив imageData обоих слов.
Осциллятор слова пересекаются с альфа-значением обоих слов в этом пикселе будет больше нуля.
Вот код и скрипку: http://jsfiddle.net/m1erickson/ecAvt/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; padding:20px; }
#wrapper{
position:relative;
width:400px;
height:400px;
}
#canvasTop,#canvasBottom,#canvasDots{
position:absolute; top:0px; left:0px;
border:1px solid green;
width:100%;
height:100%;
}
#canvasTop{
border:1px solid red;
}
#canvasDots{
border:1px solid blue;
}
</style>
<script>
$(function(){
var canvas=document.getElementById("canvasTop");
var ctx=canvas.getContext("2d");
ctx.font="192px verdana";
ctx.strokeText("No",40,220);
var canvas2=document.getElementById("canvasBottom");
var ctx2=canvas2.getContext("2d");
ctx2.font="192px verdana";
ctx2.strokeStyle="lightgray";
ctx2.strokeText("Yes",40,300);
var canvas3=document.getElementById("canvasDots");
var ctx3=canvas3.getContext("2d");
ctx3.fillStyle="blue";
var canvasOffset=$("#canvasTop").offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;
var startX;
var startY;
var isDown=false;
var imageData2=ctx2.getImageData(0,0,canvas2.width,canvas2.height);
var data2=imageData2.data;
var dotsVisible=false;
function showIntersections(){
var imageData=ctx.getImageData(0,0,canvas.width,canvas.height);
var data=imageData.data;
ctx3.clearRect(0,0,canvas.width,canvas.height);
for(var i=0;i<data.length;i+=4){
if(data[i+3]>120 && data2[i+3]>120){
var y=parseInt(i/canvas.width/4);
var x=i/4-y*canvas.width;
ctx3.beginPath();
ctx3.arc(x,y,3,0,Math.PI*2);
ctx3.closePath();
ctx3.fill();
}
}
dotsVisible=true;
}
function handleMouseDown(e){
mouseX=parseInt(e.clientX-offsetX);
mouseY=parseInt(e.clientY-offsetY);
showIntersections();
}
function handleMouseUp(e){
isDown=false;
}
function handleMouseOut(e){
isDown=false;
}
function handleMouseMove(e){
if(dotsVisible){ctx3.clearRect(0,0,canvas.width,canvas.height);}
mouseX=parseInt(e.clientX-offsetX);
mouseY=parseInt(e.clientY-offsetY);
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.strokeText("No",mouseX,mouseY+100);
}
$("#canvasDots").mousedown(function(e){handleMouseDown(e);});
$("#canvasDots").mousemove(function(e){handleMouseMove(e);});
$("#canvasDots").mouseup(function(e){handleMouseUp(e);});
$("#canvasDots").mouseout(function(e){handleMouseOut(e);});
}); // end $(function(){});
</script>
</head>
<body>
<h3>Move "NO" with mouse</h3>
<h3>Click to find intersections</h3>
<div id="wrapper">
<canvas id="canvasBottom" width=400 height=400></canvas>
<canvas id="canvasTop" width=400 height=400></canvas>
<canvas id="canvasDots" width=400 height=400></canvas>
</div>
</body>
</html>
Смежные вопросы
- 1. Рендеринг текста из холста HTML5
- 2. Создание текста подходит для холста HTML5?
- 3. поведение холста html5 при изменении размера холста
- 4. HTML5 Изменение цвета холста HEX
- 5. Сохранение данных холста HTML5
- 6. html5 удалить из холста
- 7. Улучшения производительности холста HTML5
- 8. HTML5 Линии стирания холста
- 9. Html5, JavaScript, анимация холста?
- 10. HTML5 Изменение цвета холста
- 11. html5 тень трансформации холста
- 12. HTML5 сохранение холста
- 13. Прозрачный цвет холста HTML5
- 14. Перетаскивание символов холста HTML5
- 15. HTML5 Матрица трансформации холста
- 16. Позиционирование элемента холста HTML5
- 17. html5 полотна ширины холста
- 18. Создание бесконечного холста HTML5
- 19. Динамическая анимация холста HTML5
- 20. Android-пикселизация холста HTML5
- 21. Понимание элемента холста HTML5
- 22. HTML5 рендеринг холста странно
- 23. html5 соотношение сторон холста?
- 24. HTML5 Ресурсы холста/анимации
- 25. Несколько анимаций холста HTML5
- 26. Перевод холста html5
- 27. HTML5 холста передовых рамок
- 28. Python Эквивалент холста HTML5
- 29. Перемещение элемента холста HTML5
- 30. html5 элемент холста исчезает
Это здорово, я искал библиотеку, которая вычисляет перекрестки без особых проблем математики – John
Здесь две проблемы 1) Я не слова путь 2) Путь слов не является прямой. – John
Мой плохой ... Я отредактировал свой ответ, чтобы показать пересечения между двумя гладкими словами, не требуя их глифных путей. – markE