mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-09 03:51:08 +08:00
add tk_rad_equal/tk_normalize_rad
This commit is contained in:
parent
e9fb746333
commit
51caf64c6c
@ -1,4 +1,8 @@
|
|||||||
# 最新动态
|
# 最新动态
|
||||||
|
|
||||||
|
2025/03/29
|
||||||
|
* 增加函数 tk_rad_equal/tk_normalize_rad
|
||||||
|
|
||||||
2025/03/28
|
2025/03/28
|
||||||
* 修复edit切换控件的时候光标延迟消失和改为默认回车按钮不切换控件(感谢智明提供补丁)
|
* 修复edit切换控件的时候光标延迟消失和改为默认回车按钮不切换控件(感谢智明提供补丁)
|
||||||
* 修复在小程序中tab切换控件无效的问题(感谢智明提供补丁)
|
* 修复在小程序中tab切换控件无效的问题(感谢智明提供补丁)
|
||||||
|
@ -2675,3 +2675,24 @@ bool_t tk_str_indexable(const char* str) {
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double tk_normalize_rad(double value) {
|
||||||
|
const double two_pi = 2 * M_PI;
|
||||||
|
value = fmod(value, two_pi);
|
||||||
|
if (value < 0) {
|
||||||
|
value += two_pi;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool_t tk_rad_equal(double rad1, double rad2, double epsilon) {
|
||||||
|
rad1 = tk_normalize_rad(rad1);
|
||||||
|
rad2 = tk_normalize_rad(rad2);
|
||||||
|
|
||||||
|
double diff = fabs(rad1 - rad2);
|
||||||
|
|
||||||
|
double alt_diff = fabs(2 * M_PI - diff);
|
||||||
|
|
||||||
|
return (diff <= epsilon) || (alt_diff <= epsilon);
|
||||||
|
}
|
||||||
|
@ -1344,6 +1344,34 @@ ret_t tk_mergesort(void* base, size_t nmemb, size_t size, tk_compare_t cmp);
|
|||||||
*/
|
*/
|
||||||
const char* tk_strs_bsearch(const char** strs, uint32_t nr, const char* str, bool_t case_sensitive);
|
const char* tk_strs_bsearch(const char** strs, uint32_t nr, const char* str, bool_t case_sensitive);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method tk_str_indexable
|
||||||
|
* 判断字符串是否可索引。
|
||||||
|
* > '['整数']' 表示可索引。
|
||||||
|
* @param {const char*} str 字符串。
|
||||||
|
* @return {bool_t} 返回TRUE表示可索引,否则表示不可索引。
|
||||||
|
*/
|
||||||
|
bool_t tk_str_indexable(const char* str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method tk_normalize_rad
|
||||||
|
* 将角度转换为0到2*PI之间的值。
|
||||||
|
* @param {double} value 角度(单位:弧度)。
|
||||||
|
* @return {double} 返回转换后的值。
|
||||||
|
*/
|
||||||
|
double tk_normalize_rad(double value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method tk_rad_equal
|
||||||
|
* 比较两个角度是否相等。
|
||||||
|
* > 先转换到0到2*PI之间,然后比较。
|
||||||
|
* @param {double} rad1 角度1(单位:弧度)。
|
||||||
|
* @param {double} rad2 角度2(单位:弧度)。
|
||||||
|
* @param {double} epsilon 精度。
|
||||||
|
* @return {bool_t} 返回TRUE表示相等,否则表示不相等。
|
||||||
|
*/
|
||||||
|
bool_t tk_rad_equal(double rad1, double rad2, double epsilon);
|
||||||
|
|
||||||
#define TK_STRDUP(str) ((str) != NULL) ? tk_strdup(str) : NULL
|
#define TK_STRDUP(str) ((str) != NULL) ? tk_strdup(str) : NULL
|
||||||
#define TK_STRNDUP(str, len) ((str) != NULL) ? tk_strndup(str, len) : NULL
|
#define TK_STRNDUP(str, len) ((str) != NULL) ? tk_strndup(str, len) : NULL
|
||||||
|
|
||||||
@ -1378,8 +1406,6 @@ ret_t xml_file_expand(const char* filename, str_t* s, const char* data);
|
|||||||
ret_t tk_date_time_format_impl(const date_time_t* dt, const char* format, str_t* result,
|
ret_t tk_date_time_format_impl(const date_time_t* dt, const char* format, str_t* result,
|
||||||
tk_on_result_t translate_callback);
|
tk_on_result_t translate_callback);
|
||||||
|
|
||||||
bool_t tk_str_indexable(const char* str);
|
|
||||||
|
|
||||||
END_C_DECLS
|
END_C_DECLS
|
||||||
|
|
||||||
#endif /*TK_UTILS_H*/
|
#endif /*TK_UTILS_H*/
|
||||||
|
@ -1992,3 +1992,74 @@ TEST(Utils, tk_strs_bsearch) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Utils, tk_str_indexable) {
|
||||||
|
ASSERT_EQ(tk_str_indexable("abc"), FALSE);
|
||||||
|
ASSERT_EQ(tk_str_indexable(""), FALSE);
|
||||||
|
ASSERT_EQ(tk_str_indexable("[]"), FALSE);
|
||||||
|
ASSERT_EQ(tk_str_indexable("[1]"), TRUE);
|
||||||
|
ASSERT_EQ(tk_str_indexable("[123]"), TRUE);
|
||||||
|
ASSERT_EQ(tk_str_indexable("[-123]"), TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Utils, tk_normalize_rad) {
|
||||||
|
double twopi = 2 * M_PI;
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(0), 0);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(1), 1);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(2), 2);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(3), 3);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(4), 4);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(5), 5);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(6), 6);
|
||||||
|
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(0 + twopi), 0);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(1 + twopi), 1);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(2 + twopi), 2);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(3 + twopi), 3);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(4 + twopi), 4);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(5 + twopi), 5);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(6 + twopi), 6);
|
||||||
|
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(0 - twopi), 0);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(1 - twopi), 1);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(2 - twopi), 2);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(3 - twopi), 3);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(4 - twopi), 4);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(5 - twopi), 5);
|
||||||
|
ASSERT_DOUBLE_EQ(tk_normalize_rad(6 - twopi), 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Utils, tk_compare_rad) {
|
||||||
|
double twopi = 2 * M_PI;
|
||||||
|
ASSERT_EQ(tk_rad_equal(0, 0, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(1, 1, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(2, 2, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(3, 3, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(4, 4, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(5, 5, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(6, 6, 0.0001), TRUE);
|
||||||
|
|
||||||
|
ASSERT_EQ(tk_rad_equal(0, 0 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(1, 1 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(2, 2 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(3, 3 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(4, 4 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(5, 5 + twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(6, 6 + twopi, 0.0001), TRUE);
|
||||||
|
|
||||||
|
ASSERT_EQ(tk_rad_equal(0, 0 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(1, 1 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(2, 2 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(3, 3 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(4, 4 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(5, 5 - twopi, 0.0001), TRUE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(6, 6 - twopi, 0.0001), TRUE);
|
||||||
|
|
||||||
|
ASSERT_EQ(tk_rad_equal(0, 0 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(1, 1 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(2, 2 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(3, 3 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(4, 4 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(5, 5 - twopi + 1, 0.0001), FALSE);
|
||||||
|
ASSERT_EQ(tk_rad_equal(6, 6 - twopi + 1, 0.0001), FALSE);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user