range の値に基づいて 3D 間隔でポイントを計算する関数があります[0, 1]
。私が直面している問題は、2 進浮動小数点数が正確に 1 を表すことができないということです。
関数で評価される数式は の値を計算できますが、計算するt=1.0
前に範囲がチェックされるため、値が関数によって受け入れられることはありません。
curves_error curves_bezier(curves_PointList* list, curves_Point* dest, curves_float t) {
/* ... */
if (t < 0 || t > 1)
return curves_invalid_args;
/* ... */
return curves_no_error;
}
この関数を使用して、どのように の 3 次元点を計算できt=1.0
ますか? 少し前に、そのような問題に関係していると思われることを聞いたことがありELLIPSIS
ますが、よくわかりません。
ありがとう
編集:わかりました、ごめんなさい。私が直面している問題のため、フロートは正確に 1 を表すことができないと想定しました。問題は、次のような反復を行っていたことが原因である可能性があります。
for (t=0; t <= 1.0; t += 0.1) {
curves_error error = curves_bezier(points, point, t);
if (error != curves_no_error)
printf("Error with t = %f.\n", t);
else
printf("t = %f is ok.\n", t);
}