PDA

View Full Version : سوال: راهنمایی در تنظیم فاصله اقلیدسی



zardosht
یک شنبه 25 اسفند 1392, 01:19 صبح
سلام من از این تابع می خواهم استفاده کنم برای بدست آوردن کمترین فاصله بین نقاط در دو آرایه ولی فقط فاصله مقدار خانه اول هر دو ارایه رو حساب میکنه و بر میگردونه میتوندکمک کنید که مشکل کجاست؟
public static double EuclideanDistance(double[] X, double[] Y)
{
int count = 0;
double distance = 0.0;
double sum = 0.0;
 
if (X.GetUpperBound(0) != Y.GetUpperBound(0))
{
throw new System.ArgumentException("the number of elements in X must match the number of elements in Y");
}
else
{
count = X.Length;
}
for (int i = 0; i < count; i++)
{
sum = sum + Math.Pow(Math.Abs(X[i] - Y[i]), 2);
}
distance = Math.Sqrt(sum);
return distance;
}
 
 
private void Form1_Load(object sender, EventArgs e)
{
double sum = 0.0;
double[] x = new double[3];
double[] y = new double[3];
x[0] = 1;
y[1] = 20;
x[2] = 100;
y[0] = 200;
x[1] = 10;
y[2] = 90;
int count = x.Length;
for (int i = 0; i < count; i++)
{
listBox1.Items.Add(EuclideanDistance(x, y));
}

rahnema1
یک شنبه 25 اسفند 1392, 07:07 صبح
اگه می خواهید کمترین فاصله حساب بشه می تونید این جوری بنویسید

List<List<int> > a= new List<List<int>>{
new List<int>{1,200},
new List<int>{10,20},
new List<int>{100,90}
};
var minDist = a.Select(xx=> a.Select
(yy=> Math.Sqrt(Math.Pow(xx[0]- yy[0], 2)+ Math.Pow(xx[1]- yy[1], 2)))
.OrderBy(zz=>zz ).ElementAt(1) ).OrderBy(vv=>vv )
.ElementAt(1);
MessageBox.Show("min dist="+minDist.ToString());

zardosht
یک شنبه 25 اسفند 1392, 22:46 عصر
سلام ،ممنونم.ولی من میخواهم عناصر فاصله عناصر دو آرایه که از نوع صحیج هستند رو بدست بیاورم و با لیست کار نکردم.مشه راهنمایی کنی ،بزرگ وار

rahnema1
دوشنبه 26 اسفند 1392, 00:47 صبح
یک datagridview درست کنید به اسم dataGridView1 بعدش هم این کد را اجرا کنید

List<List<int> > a= new List<List<int>>{
new List<int>{0,1,200},
new List<int>{1,10,20},
new List<int>{2,100,90}};
foreach (var x in a){
dataGridView1.Columns.Add(x[0]. ToString(), x[0]. ToString());
dataGridView1.Rows.Add(1);
dataGridView1. Rows[dataGridView1.Rows. Count-2].HeaderCell. Value=x[0]. ToString();
}
a.Select(xx=> a.Where(yy=> yy[0]>xx[0])
.Select(yy=> dataGridView1.Rows[yy[0]] .Cells[xx[0]] .Value=
Math.Sqrt(Math.Pow( xx[1]- yy[1], 2)+Math.Pow( xx[2]-yy[2], 2)))
.ToList()).ToList();