- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何检查笔划是否与其他笔划交叉?这可能吗?
我尝试使用 ispointInPath()
和 ispointInStroke()
,但它不起作用。
最佳答案
如果两个笔划都是线段,您可以使用 Paul Bourke 的测试来测试它们是否相交:
// Get interseting point of 2 line segments (if any)
// Attribution: http://paulbourke.net/geometry/pointlineplane/
function line2lineIntersection(p0,p1,p2,p3) {
var unknownA = (p3.x-p2.x) * (p0.y-p2.y) - (p3.y-p2.y) * (p0.x-p2.x);
var unknownB = (p1.x-p0.x) * (p0.y-p2.y) - (p1.y-p0.y) * (p0.x-p2.x);
var denominator = (p3.y-p2.y) * (p1.x-p0.x) - (p3.x-p2.x) * (p1.y-p0.y);
// Test if Coincident
// If the denominator and numerator for the ua and ub are 0
// then the two lines are coincident.
if(unknownA==0 && unknownB==0 && denominator==0){return(null);}
// Test if Parallel
// If the denominator for the equations for ua and ub is 0
// then the two lines are parallel.
if (denominator == 0) return null;
// If the intersection of line segments is required
// then it is only necessary to test if ua and ub lie between 0 and 1.
// Whichever one lies within that range then the corresponding
// line segment contains the intersection point.
// If both lie within the range of 0 to 1 then
// the intersection point is within both line segments.
unknownA /= denominator;
unknownB /= denominator;
var isIntersecting=(unknownA>=0 && unknownA<=1 && unknownB>=0 && unknownB<=1)
if(!isIntersecting){return(null);}
return({
x: p0.x + unknownA * (p1.x-p0.x),
y: p0.y + unknownA * (p1.y-p0.y)
});
}
否则,您可以使用像素 HitTest 来测试一个笔划是否与任何其他笔划相交:
context.getImageData
获取两个 Canvas 的像素数据。var canvas1=document.getElementById("canvas1");
var ctx1=canvas1.getContext("2d");
var canvas2=document.getElementById("canvas2");
var ctx2=canvas2.getContext("2d");
var cw=canvas1.width;
var ch=canvas1.height;
// draw test stroke on canvas#1
ctx1.beginPath();
ctx1.arc(150,100,50,0,Math.PI);
ctx1.lineWidth=3;
ctx1.stroke();
// draw target stroke on canvas#2
ctx2.beginPath();
ctx2.arc(150,175,50,0,Math.PI,true);
ctx2.lineWidth=3;
ctx2.strokeStyle='red';
ctx2.stroke();
// report if the target stroke intersects with any other stroke
alert('Assert: The red target intersects any other stroke: '+intersects());
function intersects(){
// get the pixel data for both canvases
var data1=ctx1.getImageData(0,0,cw,ch).data;
var data2=ctx2.getImageData(0,0,cw,ch).data;
// test all corresponding pixels
// data[i+3] is the opacity value so if both data[i+3]'s are
// non-zero, then both canvases have strokes at that pixel
for(var i=0;i<data1.length;i+=4){
if(data1[i+3]>0 && data2[i+3]>0){
return(true);
}
}
return(false);
}
body{ background-color: ivory; }
canvas{border:1px solid red; margin:0 auto; }
<h4>The Other stroke(s)</h4>
<canvas id="canvas1" width=300 height=300></canvas>
<h4>The target stroke to test if it overlaps others</h4>
<canvas id="canvas2" width=300 height=300></canvas>
关于HTML5 Canvas : How can I check if a stroke is crossing an other stroke?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697902/
谁能给我一个这些属性的例子:stroke-dasharray、stroke-linecap、stroke-linejoin 我试过使用它们,但我不太理解它们值的 sentext 结构。 最佳答案 Ph
如何检查笔划是否与其他笔划交叉?这可能吗? 我尝试使用 ispointInPath() 和 ispointInStroke(),但它不起作用。 最佳答案 如果两个笔划都是线段,您可以使用 Paul B
我创建了一个矩形形状以将其用作列表项背景。我的问题是笔画不跟随 View 边框,而是留出 +/- 笔画宽度的边距。 这是我的形状的 xml: 这是我风格的 xml:
两者的行程元素在这里被忽略。 的笔触颜色设置为蓝色,同时出现在 上元素也。为什么? 我想要所有 3 个元素的不同条纹颜色。但它不起作用。 最佳答案 因为 c
为什么在这个 SVG 中,我可以在悬停时更改描边宽度,但不能更改描边颜色? 问题在下面的代码片段中清楚地呈现出来。 stroke-width:5;正在查看应用于 中的所有元素, 而 stroke:b
在 Gimp 2.6 中有一个“编辑”->“描边路径”对话框。在此对话框中有一个“描边线”区域,其中包含线宽、端点样式、连接样式、斜接限制等选项。 我将如何使用 script-fu 中的“描边线”选项
当笔画宽度大于 1 像素时,我在 IE 中动画笔画路径时遇到一个奇怪的问题。我正在使用以下脚本(不是我创建的): //inspired by http://product.voxmedia.com/p
通过 ng-style 传递这些值,所以: ng-style="{'stroke-dasharray':data.value, 'stroke-dashoffset': data.value}" 打破
stroke 开头的属性可以定义线段的各种属性,包括线条的宽度、起末的形状、线条类型 SVG提供了一个范围广泛 stroke 属性,但我们主要讲解一下几种: stroke stroke-
我想检测 QuadCurve 上的鼠标点击事件,但只检测“笔划”部分。仅清除图像的绿色部分。 在这里,我使用红色填充值,但在我的应用程序中我使用透明填充值。因此检测曲线可见部分的点击是至关重要的。 示
我真正想要的是一种在 WPF 形状(例如椭圆)上设置负描边粗细值的方法,以便描边轮廓向外绘制到形状的左侧和顶部,而不是在形状内部,覆盖我的书写当我使笔划的想法太粗时的文字...我希望椭圆的半径保持不变
如何在不使用插图的情况下仅在可绘制对象的右侧使用笔划?
我目前正在使用下面的代码绘制一条线,并希望在我的路径周围设置边界框,但是如果我调用 path.getBounds(),我会得到一个忽略笔划宽度的边界框和线连接因此我的绘图最终在放置在 JViewpor
我从这个网站和这里的贡献者那里得到了很多帮助,谢谢。现在我有一个关于 Fabric.js 中带有笔划的矩形的问题,因为我将它用作图像和文本的占位符,当我缩放它时,边框线宽度也被缩放,我认为这是我想要的
我想我不太明白这里的某些东西。stroke-dasharray 中的百分比单位与什么有关?我在考虑相对于 SVG View 框的问题,但我可能错了。 我的问题:我有一个 SVG,宽度为 320px,高
我正在用 SVG 制作一个简单的动画 stroke-dashoffset以及一系列路径。 问题是:在没有动画的情况下,内联 SVG 有两个具有非常锐 Angular 的三 Angular 形,并且它们
我正在研究 SVG 仪表,我想在范围 slider 移动到带有渐变颜色的事件笔触填充时将半圆分成几部分。并且想在计针移动时再增加一条黑色运行轨迹。我曾尝试使用 stroke-dasharray 但添加
我有 3 个 svg donut chart 表,每个图表都有一条用 stroke-dasharray 创建的线,所有图表加起来为 100%。 我希望每个图表都从最后一个图表结束的地方开始,所以第一个
我有 3 个 svg donut chart 表,每个图表都有一条用 stroke-dasharray 创建的线,所有图表加起来为 100%。 我希望每个图表都从最后一个图表结束的地方开始,所以第一个
我想在我的 Google 折线图中的点周围添加一笔画。 来自points-documentation Google Charts(底部)我们有: The following style customi
我是一名优秀的程序员,十分优秀!