Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 直线和路径之间的交点/多边形Fabric.js_Javascript_Fabricjs - Fatal编程技术网

Javascript 直线和路径之间的交点/多边形Fabric.js

Javascript 直线和路径之间的交点/多边形Fabric.js,javascript,fabricjs,Javascript,Fabricjs,我们正在使用fabric.js在javascript上创建一个小应用程序,我们将形状放置在画布上,并用线条连接它们。有不同的形状,有些是用fabic.js创建的,有些是用。直线从一个中心到另一个中心,并在移动任一对象时正确更新 这些线的末端也有一个小箭头。但是我想把这个形状放在直线与物体相交的点上,这样它总是可见的。我尝试过fabric.js交集函数,但除了知道两个对象是否相交(如下图所示)外,我还无法理解它们是如何工作的 所以问题是:我怎样才能找到形状与直线相交的点 这是我们对其工作原理的概述

我们正在使用fabric.js在javascript上创建一个小应用程序,我们将形状放置在画布上,并用线条连接它们。有不同的形状,有些是用fabic.js创建的,有些是用。直线从一个中心到另一个中心,并在移动任一对象时正确更新

这些线的末端也有一个小箭头。但是我想把这个形状放在直线与物体相交的点上,这样它总是可见的。我尝试过fabric.js交集函数,但除了知道两个对象是否相交(如下图所示)外,我还无法理解它们是如何工作的

所以问题是:我怎样才能找到形状与直线相交的点

这是我们对其工作原理的概述:

var canvas = new fabric.Canvas('c');

function addChildMoveLine(options) {
  var object = options.target;
  var objectCenter = object.getCenterPoint();

  if (object.addChild) {
    if (object.addChild.from) {
      object.addChild.from.forEach(function(line) {
        var currentLineWidth = line.getStrokeWidth();
        line.set({
          'x1': objectCenter.x - currentLineWidth / 2,
          'y1': objectCenter.y - currentLineWidth / 2
        });
      });
      // Here we want to calculate the intersection between the object and the line.
    }
    if (object.addChild.to) {
      object.addChild.to.forEach(function(line) {
        var currentLineWidth = line.getStrokeWidth();
        line.set({
          'x2': objectCenter.x - currentLineWidth / 2,
          'y2': objectCenter.y - currentLineWidth / 2
        });
      });
      // Calculate the intersection on the other end.
    }
  }

  canvas.renderAll();
}

function addItem(x, y) {
  var circle = new fabric.Circle({
    radius: 50,
    fill: "#faa",
    scaleY: 0.5,
    originX: 'center',
    originY: 'center'
  });

  var text = new fabric.IText("text", {
    fontSize: 15,
    originX: 'center',
    originY: 'center'
  });

  var group = new fabric.Group([circle, text], {
    // any group attributes here
    left: x,
    top: y
  });

  canvas.add(group);
  canvas.renderAll();

  return group;
}

function makeLine(coords) {
  var line = new fabric.Line(coords, {
    fill: "#000",
    stroke:"#000",
    strokeWidth: 3,
    selectable: true
  });

  fromObject.addChild = {
    // this retains the existing arrays (if there were any)
    from: (fromObject.addChild && fromObject.addChild.from) || [],
    to: (fromObject.addChild && fromObject.addChild.to)
  }
  fromObject.addChild.from.push(line);
  // to-object:
  toObject.addChild = {
    from: (toObject.addChild && toObject.addChild.from),
    to: (toObject.addChild && toObject.addChild.to) || []
  }
  toObject.addChild.to.push(line);

  return line;
}

canvas.on('object:moving', function(e){
  addChildMoveLine(e);
})

var fromObject = addItem(50, 100);
var toObject = addItem(300, 100);

var from = fromObject.getCenterPoint();
var to = toObject.getCenterPoint();
var coords = [from.x, from.y - 3 / 2, to.x, to.y - 3 / 2];
var line = makeLine(coords);
canvas.add(line);
line.sendToBack();
在exxampl工作的情况下

任何帮助都将不胜感激


编辑:澄清问题并添加代码和JSfiddle。

您的问题是什么,代码在哪里?添加了一些代码并澄清了问题,谢谢@MauroAguilar您的问题是什么,代码在哪里?添加了一些代码并澄清了问题,谢谢@MauroAguilar