簡體   English   中英

Function 計算 c 中的歐幾里得距離

[英]Function to calculate Euclidean distance in c

我寫了計算歐幾里得距離的 function。 function 的返回值不在要求的精度范圍內。 我將所有變量設置為 double ,這是最准確的類型,並使用了sqrt() function ,這是 double 而不是sqrtf ,但返回的值仍然不正確。 這是我的 function:


float distance(const struct color_t* p1, const struct color_t* p2, int* err_code) {
        if (p1 == NULL || p2 == NULL) {
            return -1;
        }
     double r1 = 1, r2 = 1, r3 = 1, r4=1;
    double p11 = (double)p1->r - (double)p2->r;
    double p22 = (double)p1->g - (double)p2->g;
    double p33 = (double)p1->b - (double)p2->b;
    double p44 = (double)p1->a - (double)p2->a;
    for (int exponent = 2; exponent > 0; exponent--)
    {
        r1 = r1 * p11;
        r2 = r2 * p22;
        r3 = r3 * p33;
        r4 = r4 * p44;
    }
    double b = r1 + r2 + r3 + r4;
    double a = sqrt(b);
    if (a < 0) {
        return -1;
    }   
    return a;
}

提示:function distance() 返回的值 367.106262 不符合要求的精度范圍。

並測試:

struct color_t c1 = {.r = 14, .g = 253, .b = 23, .a = 76}, c2 = {.r = 253, .g = 14, .b = 148, .a = 6};

            printf("#####START#####");
            float dist = distance(&c1, &c2, NULL);
            printf("#####END#####\n");

            test_error(360.4206425334894 > dist && 360.3206425334894 < dist, "Value %f returned by function distance() doesn't fit in required accuracy range", dist);

去掉透明詞

@abelenky

OP 正在尋找顏色的“距離”。

int最后一步外,其他所有數學都很好

dist2的最大值為 255*255*3 = 195,075,完全在float可編碼范圍內。

float distance(const struct color_t *p1, const struct color_t *p2, int *err_code /* unused */ ) {
  if (p1 == NULL || p2 == NULL) {
    return -1;
  }
  int p11 = p1->r - p2->r;
  int p22 = p1->g - p2->g;
  int p33 = p1->b - p2->b;
  int dist2 = p11*p11 + p22*p22 + p33*p33;
  return sqrtf(dist2);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM