リンクで提供されているルーチンを使用して、そこから出力を取得し、その周りに独自のラッパーを追加して、パスを変更し、必要な数ピクセルでそれをプッシュすると思います。入力パラメータで移動するピクセルの量を作成して、それを試してみることができます。
それ以外の場合は、提供されたルーチンに2番目のパスを直接追加できます。いずれにせよ、これは2パスのアプローチだと思います。オブジェクトの外側の境界を見つける必要があります。それが提供されているものです。次に、基本的に自分でパスを移動し、パスの導関数を理解して、現在のポイントで導関数に対して垂直にパスを移動できるようにする必要があります。また、外側から内側を認識する必要があります(つまり、線を移動する方向)。
アルゴリズムは次のようになります(アルゴリズムだけを思い出してください)。
Create New List of Points for the new line
For all points i in 0 to (n-2) (points in original point list)
// Get a New point in between
float xNew = (x(i) + x(i + 1) ) / 2
float yNew = (y(i) + y(i + 1) ) / 2
// Need to figure out how much to move in X and in Y for each (pixel) move along
// the perpendicular slope line, remember a^2 + b^2 = c^2, we have a and b
float a = y(i + 1) - y(i)
float b = x(i + 1) - x(i)
float c = sqrt( (a * a) + (b * b) )
// c being the hypotenus is always larger than a and b.
// Lets Unitize the a and b elements
a = a / c
b = b / c
// Assume the original point array is given in clockwise fashion
a = -a
b = -b
// Even though a was calculated for diff of y, and b was calculated for diff of x
// the new x is calculated using a and new y with b as this is what gives us the
// perpendicular slope versus the slope of the given line
xNew = xNew + a * amountPixelsToMoveLine
yNew = yNew + b * amountPixelsToMoveLine
// Integerize the point
int xListAdd = (int)xNew
int yListAdd = (int)yNew
// Add the new point to the list
AddPointToNewPointList(xListAdd, yListAdd)
Delete the old point list
私が実行しているジオメトリの画像: