سؤال

هذه هي السؤال أكثر من الخوارزميات، ولكن نأمل أن يساعدني شخص ما في هذا الأمر. لدي خط مصنوع من نقاط خطوط الطول / خط الطول وأريد إنشاء مضلع منه مع بعض سمك محدد مسبقا. لذلك سيكون المضلع في الأساس حواف تعمل بالتوازي مع مادة polyline الأصلية على أي من الجانبين. أي أفكار حول أفضل طريقة لاتخاذ لهذا؟

تحرير: خطتي الحالية هي تكرار أكثر من كل من النقاط، والعثور على المنحدر إلى النقطة التالية، ثم ابحث عن الخطوط الموازية إلى أي من الجانبين وأولئك الذين يشكلون جوانب المضلعات. فقط لم أكن أعرف ما إذا كانت هناك طريقة أسهل للقيام بذلك.

هل كانت مفيدة؟

المحلول

ما تريد القيام به هو إنشاء زوج من الخطوط الجديدة التي تحولت قليلا إلى اليسار واليمين في السطر الأصلي. وبالتالي:

var polygon = [
  {x:0, y:0},
  {x:10, y:0},
  {x:10, y:10},
  {x:0, y:10}
];
var outerPolygon = [];
var innerPolygon = [];
for(var i=1; i<polygon.length; i++){
  var ret = newLines(polygon[i-1], polygon[i]);
  outerPolygon.push(ret[0]);
  innerPolygon.push(ret[1]);
}
function newLines(start, stop){
  var dx = start.x - stop.x;
  var dy = start.y - stop.y;
  var d = Math.sqrt(dx*dx + dy*dy);
  dx /= d;
  dy /= d;
  var rNormal = {dx: dy, dy:-dx};
  var lNormal = {dx: -dy, dy:dx};
  return [
    {start:{
      x:start.x+rNormal.dx,
      y:start.y+rNormal.dy},
     stop:{
      x:stop.x+rNormal.dx,
      y:stop.y+rNormal.dy}
    },
    {start:{
      x:start.x+lNormal.dx,
      y:start.y+lNormal.dy},
     stop:{
      x:stop.x+lNormal.dx,
      y:stop.y+lNormal.dy}
    },
  ];
}

نصائح أخرى

إذا فهمت سؤالك هو نفسه هذه واحد، الذي لديه بعض الإجابات التفصيلية للغاية بالفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top