ฉันมีรายการจุด ฉันเลือกจุดแรกและจุดถัดไป (จุดที่สอง) แล้วลากเส้นระหว่างจุดที่หนึ่งและจุดที่สอง
ฉันต้องการเพิ่มจุดยอดอื่นระหว่างจุดที่มีอยู่
นี่คือวิธีการของฉัน
ฉันกำลังคำนวณจุดทั้งหมดของเส้นตรง โดยใช้ y = mx + c
ปัญหาของฉันคือฉันสามารถหาจุดแนวตั้ง x = a จุดแนวทแยงและจุดแนวนอนได้ทั้งหมด แต่ไม่ใช่ทั้งหมด ฉันจำเป็นต้องรู้ว่าอะไรคือสาเหตุ และฉันจะแก้ไขได้อย่างไร
ฉันกำลังสร้างบิตแมปโอเวอร์เลย์ที่จัดทำโดยไลบรารีตัวจับวิดีโอ ICImaging ดังนั้นฉันจึงถูกจำกัดให้ส่งเฉพาะจุดจำนวนเต็มเพื่อวาดบนหน้าจอ
private void btnAddPoint_Click(object sender, EventArgs e)
{
//IsLineSelected = true;
Debug.Print("Current Points in List ");
foreach (System.Drawing.Point P in PathPoints)
{
Debug.Print(P.ToString());
}
for (int IndexI = 0; IndexI != PathPoints.Count - 1; IndexI++)
{
if (IndexI == PathPoints.Count-1)
{
break;
}
else
{
Debug.Print("P1:" + PathPoints[IndexI].ToString() + "P2:"+ PathPoints[IndexI+1].ToString());
ShapeDirectory.AllLinePoints(PathPoints[IndexI], PathPoints[IndexI + 1]);
}
}
foreach (System.Drawing.Point P in ShapeDirectory.LinePoints)
{
PathPoints3.Add(P);
}
drawLinePoints = true;
}
public static void AllLinePoints(Point p1, Point p2)
{
double YDiff = p2.Y - p1.Y;
double XDiff = p2.X - p1.X;
double SlopM = Math.Round(Math.Abs(YDiff / XDiff));
double YinterceptB = Math.Round(Math.Abs(p1.Y - (SlopM * p1.X)));
Debug.Print("Slop: " + SlopM.ToString() + "Y Intercept: " + YinterceptB.ToString());
if (SlopM == 0)
{
}
if (Double.IsNegativeInfinity(SlopM) || Double.IsPositiveInfinity(SlopM))
{
int LowerBoundX = 0;
int LowerBoundY = 0;
int upperBoundX;
int upperBoundY;
double distanceBetwwenP1andp2 = GetDistanceBetween2points(p1, p2);
if (p1.X == p2.X )
{
LowerBoundX = p1.X;
upperBoundX = p2.X;
}
if (p1.Y <= p2.Y)
{
LowerBoundY = p1.Y;
upperBoundY = p2.Y;
}
else
{
LowerBoundY = p2.Y;
upperBoundY = p1.Y;
}
//Vertical
for (int YIndex = LowerBoundY; YIndex <= upperBoundY; YIndex++)
{
TempLinePoint.X = LowerBoundX;
TempLinePoint.Y = YIndex;
//Debug.Print("Current Line Points X: " + XIndex.ToString() + "Y: " + YIndex.ToString());
LinePoints.Add(TempLinePoint);
}
}
else
{
int LowerBoundX;
int LowerBoundY;
int upperBoundX;
int upperBoundY;
double distanceBetwwenP1andp2 = GetDistanceBetween2points(p1, p2);
if (p1.X <= p2.X && p1.Y <= p2.Y)
{
LowerBoundX = p1.X;
upperBoundX = p2.X;
LowerBoundY = p1.Y;
upperBoundY = p2.Y;
}
else
{
LowerBoundX = p2.X;
upperBoundX = p1.X;
LowerBoundY = p2.Y;
upperBoundY = p1.Y;
}
//if Vertical
for (int YIndex = LowerBoundY; YIndex <= upperBoundY; YIndex++)
{
for (int XIndex = LowerBoundX; XIndex <= upperBoundX; XIndex++)
{
if (YIndex == (SlopM * XIndex) + YinterceptB)
{
TempLinePoint.X = XIndex;
TempLinePoint.Y = YIndex;
//Debug.Print("Current Line Points X: " + XIndex.ToString() + "Y: " + YIndex.ToString());
LinePoints.Add(TempLinePoint);
}
}
}
}
แก้ไข
ฉันเปลี่ยนวิธีการของฉันแล้ว
รหัสอยู่ในคำตอบ