本地服務(wù)器網(wǎng)站建設(shè)google推廣怎么做
????????之前做過(guò)使用Dreamteck Splines插件構(gòu)建車(chē)道線之前需求是給定車(chē)道線的點(diǎn)位,根據(jù)點(diǎn)位來(lái)進(jìn)行構(gòu)建。
????????由于AI識(shí)別出來(lái)的點(diǎn)位不線性,畫(huà)出來(lái)的車(chē)道線經(jīng)常是歪七扭八,所以使用五階曲線系數(shù)進(jìn)行構(gòu)建。
? ? ? ? 使用在線圖形計(jì)算器進(jìn)行測(cè)試構(gòu)建,公式為:
x=a+b*y+c*y^2-d*y^3+e*y^4
????????我使用的測(cè)試系數(shù)為:
????????a=1,b=0.01,c=0.005,d=0.0001,e=0
????????代入后公式即為:
x=1+0.01y+0.005y^2-0.0001y^3+0y^4。
? ? ? ? 這里是輸入y軸坐標(biāo)點(diǎn),返回結(jié)果為x坐標(biāo),想知道多遠(yuǎn)的點(diǎn)位坐標(biāo),將位置信息代入y即可。
構(gòu)建出來(lái)的圖形如下圖所示,
????????在unity中,將公式轉(zhuǎn)為代碼,輸入五階曲線系數(shù)數(shù)組,與y點(diǎn)的坐標(biāo),返回值為該坐標(biāo)的x點(diǎn)坐標(biāo)。即為:
public float GetSplineX(float[] fit_params, float y_point){ return fit_params[0] + (fit_params[1] * y_point) + (fit_params[2] * (float)Math.Pow(y_point, 2.0)) - (fit_params[3] * (float)Math.Pow(y_point, 3.0)) + (fit_params[4] * (float)Math.Pow(y_point, 4.0));}
????????初始化時(shí)構(gòu)建車(chē)道線,創(chuàng)建Spline的物體
private void CreatSplineMesh(){Spline_Render_Objs = new GameObject("Spline");Spline_Render_Objs.transform.localPosition = Vector3.zero;Spline_Render_Objs.transform.SetParent(base.transform);splineComputer = Spline_Render_Objs.AddComponent<SplineComputer>();splineComputer.type = Spline.Type.BSpline;//使用插件自帶的Bspline效果劃線,也可以選擇貝塞爾曲線splineComputer.sampleRate = 5;splineComputer.sampleMode = SplineComputer.SampleMode.Uniform;splineComputer.space = SplineComputer.Space.Local;Spline_Render_Objs.AddComponent<MeshRenderer>().material = DottedLine_mat;//指定車(chē)道線材質(zhì)SplineRenderer splineRenderer = Spline_Render_Objs.AddComponent<SplineRenderer>();splineRenderer.spline = splineComputer;splineRenderer.uvMode = MeshGenerator.UVMode.UniformClip;splineRenderer.uvScale = new Vector2(1f, 0.2f);splineComputer.RebuildImmediate();}
????????在進(jìn)行點(diǎn)位創(chuàng)建和賦值
for (int i = 0; i < y_distance; i++)//y_distance為具體想顯示的長(zhǎng)度
{x_Pos = GetSplineX(lane_info.lane_fit_params_left_5rd, i);SplinePoint m_point = new SplinePoint();m_point.position = pos;m_point.size = 0.5f;m_point.color = Color.white;splineComputer.SetPoint(_idx, m_point);
}
????????構(gòu)建出來(lái)的車(chē)道線如下圖所示,這里只選擇了0-39米的點(diǎn)位。
????????目前車(chē)道線的長(zhǎng)短可以根據(jù)Y軸的距離進(jìn)行調(diào)整。
????????但是若是遇到虛線+實(shí)線+虛線的車(chē)道線,該方法還有待升級(jí)(我也沒(méi)想好咋整)