मैंने बहुत समय और रूपों को आजमाया और खोजा है और निश्चित रूप से मैं एक सरल और तेज़ तक पहुंच गया हूं। यह चाल इस रूप में क्यूबिक बेजियर फ़ंक्शन प्राप्त करती है: पी (यू) = यू^3 (सी 0 + 3 सी 1 -3 सी 2 + सी 3) + यू^2 (3 सी 0 -6 सी 1 + 3 सी 2) + यू (-3 सी 0 + 3 सी 1) + सीजहां सीआई नियंत्रण बिंदु हैं। दूसरा भाग एक्स से बाइनरी खोज के साथ खोज वाई है।
static public class CubicBezier {
private BezierCubic bezier = new BezierCubic();
public CubicBezier(float x1, float y1, float x2, float y2) {
bezier.set(new Vector3(0,0,0), new Vector3(x1,y1,0), new Vector3(x2,y2,0), new Vector3(1,1,1));
}
public float get(float t) {
float l=0, u=1, s=(u+l)*0.5f;
float x = bezier.getValueX(s);
while (Math.abs(t-x) > 0.0001f) {
if (t > x) { l = s; }
else { u = s; }
s = (u+l)*0.5f;
x = bezier.getValueX(s);
}
return bezier.getValueY(s);
}
};
public class BezierCubic {
private float[][] cpoints = new float[4][3];
private float[][] polinom = new float[4][3];
public BezierCubic() {}
public void set(Vector3 c0, Vector3 c1, Vector3 c2, Vector3 c3) {
setPoint(0, c0);
setPoint(1, c1);
setPoint(2, c2);
setPoint(3, c3);
generate();
}
public float getValueX(float u) {
return getValue(0, u);
}
public float getValueY(float u) {
return getValue(1, u);
}
public float getValueZ(float u) {
return getValue(2, u);
}
private float getValue(int i, float u) {
return ((polinom[0][i]*u + polinom[1][i])*u + polinom[2][i])*u + polinom[3][i];
}
private void generate() {
for (int i=0; i<3; i++) {
float c0 = cpoints[0][i], c1 = cpoints[1][i], c2 = cpoints[2][i], c3 = cpoints[3][i];
polinom[0][i] = c0 + 3*(c1 - c2) + c3;
polinom[1][i] = 3*(c0 - 2*c1 + c2);
polinom[2][i] = 3*(-c0 + c1);
polinom[3][i] = c0;
}
}
private void setPoint(int i, Vector3 v) {
cpoints[i][0] = v.x;
cpoints[i][1] = v.y;
cpoints[i][2] = v.z;
}
}
'' length' t' मूल्य के एक समारोह है। वास्तव में यह सुनिश्चित नहीं है कि आप इसे प्राप्त करने के बारे में कैसे जाएंगे। – Wex