내 응용 프로그램은 그림 상자에서 2 점 사이의 거리를 제공합니다. 이전에 그들은 이것을 손으로하고 있었고 앱이 그것을하고 싶어했습니다. 그러나 선을 만들 때, 예를 들어 작은 선이라도 아래 수식을 사용하여 해당 선의 거리는 30
입니다. 그러나 1/32로 눈금자를 사용하면 측정 값은 5/32가됩니다.2 포인트의 거리를 1/32로 변환 하시겠습니까?
그래서 30은 무엇입니까? 여기에 어떤 유형의 거리가 사용되며 1/32 측정 기능을 가진 눈금자를 사용하는 것처럼 번호를 표시하려면 어떻게 변환합니까?
//Distance between 2 points.
// ______________________
//d = √ (x2-x1)^2 + (y2-y1)^2
dist = (Convert.ToInt32(Math.Sqrt(Math.Pow(Math.Abs(p2List[i].X - p1List[i].X), 2) + Math.Pow(Math.Abs(p2List[i].Y - p1List[i].Y), 2))));
그래서 여기까지했습니다.
Vector2 src = new Vector2(p1List[i].X, p1List[i].Y); //first point on the image
Vector2 dst = new Vector2(p2List[i].X, p2List[i].Y); //second point on the image
float Density = 38;
Vector2 dif = dst - src; //difference between the vectors
float len = dif.Length(); //length of the vector, in this case the distance in pixels
float inchLen = len/Density; //density is a float with the image DPI's
DataGridViewRow row = dataGridView1.Rows[rowId];
row.Cells["colLength"].Value = inchLen;
이
는, 내가 만든 작은 줄을, 나에게0.7649706
을 제공하지만 나는
3,5,6
말을 확인하는 방법을 모르거나 통치자의 1/32을 사용하여 측정하면 어떤 그것이 될 것입니다.
을 경우 점 위치는 픽셀 단위입니다. 따라서 픽셀 단위로 거리를 인치로 변환해야합니다. –
그리고 intergers이므로 정수 연산 오류를 피하기 위해 float/double로 변환해야합니다. – TaW
System.Numerics 라이브러리와 Vector2 클래스를 사용하면 이미 하드웨어 가속으로 구현 된 Length 함수가 있습니다. – Gusman