경로 복사에 관련된 질문이 있습니다. 의 내가이 경로 있다고 가정 해 봅시다 : 거리가 d 인 경로를 복사하는 수학
나는 검은 하나 외에이 경로의 정확한 사본을 원한다. 두 점 사이의 각도를 계산하는 작은 C# 프로그램을 작성했습니다. 각도에 따라 X 또는 Y 값에 대한 간격 띄우기가 추가됩니다. 당신이 볼 수 있듯이, 그것은 꽤 아니다 : 그것은 종류의 작동 ,이 결과입니다. 자, 내 진짜 질문입니다 : 이것을 위해 사용할 적절한 수학은 무엇입니까?
나는 누군가이 질문에 다소 의문을 품고 있기를 바랍니다. 감사 샤샤
코드 :
void Plot(List<Point> points)
{
Graphics g = pictureBox.CreateGraphics();
g.Clear(Color.White);
for (int i = 0; i < points.Count - 1; i++)
{
g.DrawLine(Pens.Black, points[i], points[i + 1]);
}
List<Point> points2 = new List<Point>();
for (int i = 0; i < points.Count - 1; i++)
{
var angle = getAngleFromPoint(points[i], points[i + 1]);
Debug.WriteLine(angle);
if (angle < 180 && angle >= 135)
{
points2.Add(new Point(points[i].X - OFFSET, points[i].Y));
}
if (angle < 135 && angle >= 90)
{
if (points[i].Y < points[i + 1].Y)
{
points2.Add(new Point(points[i].X - OFFSET/2, points[i].Y + OFFSET));
}
else
{
}
}
if (angle < 90 && angle >= 45)
{
if (points[i].Y < points[i + 1].Y)
{
points2.Add(new Point(points[i].X - OFFSET, points[i].Y));
}
else
{
points2.Add(new Point(points[i].X + OFFSET, points[i].Y));
}
}
if (angle < 45 && angle >= 0)
{
if (points[i].Y < points[i + 1].Y)
{
points2.Add(new Point(points[i].X - OFFSET, points[i].Y));
}
else
{
points2.Add(new Point(points[i].X + OFFSET, points[i].Y));
}
}
if (angle < 360 && angle >= 315)
{
if (points[i].Y < points[i + 1].Y)
{
points2.Add(new Point(points[i].X + OFFSET, points[i].Y));
}
else
{
points2.Add(new Point(points[i].X + 10, points[i].Y - OFFSET));
}
}
if (angle < 315 && angle >= 270)
{
points2.Add(new Point(points[i].X, points[i].Y - OFFSET));
}
if (angle < 270 && angle >= 225)
{
if (points[i].Y < points[i + 1].Y)
{
points2.Add(new Point(points[i].X - OFFSET/2, points[i].Y - OFFSET));
}
else
{
}
}
if (angle < 225 && angle >= 180)
{
if (points[i].X < points[i + 1].X)
{
points2.Add(new Point(points[i].X, points[i].Y - OFFSET));
}
else
{
if (points[i].Y < points[i + 1].Y) // \
{
points2.Add(new Point(points[i].X - OFFSET, points[i].Y));
}
else
{
}
}
}
}
for (int i = 0; i < points2.Count - 1; i++)
{
g.DrawLine(Pens.Red, points2[i], points2[i + 1]);
}
}
나는 그 결과를 imnprove 수 있지만, 더 나은 솔루션이 있어야합니다 (아마도 30도 45도 단계에서) 각도를 줄이면 나는 생각한다.
두 번째 출력을 제공하는 코드를 게시 할 수 있습니까? – Jack
내 게시물을 편집했습니다. 귀엽지는 않아요.) –
의도 한 결과는 무엇입니까? 모든 라인이 그 대응 물과 평행해야합니까? – Jack