資源簡介
通過多個三維控制點 實現生成Bezier樣條曲線 并通過輸入值(按照百分比 輸入0-100即可) 得到曲線上的三維坐標。
代碼片段和文件信息
/*
20171130?通過多個三維控制點?實現生成樣條曲線?并通過輸入值(按照百分比?輸入0-100即可)?得到曲線上的三維坐標
*/
#include??
#include?
#include?
typedef?struct
{
float?x;
float?y;
float?z;
}?POINT3D;
/*
myOutXYZ()
第一個參數為輸入的KeyPoints
第二個參數為輸入點的數量
第三個參數為輸入要想找到的樣條曲線上點的位置(0?-?100)
第四個參數為輸出的點的三維坐標
第五個參數為輸入生成的樣條曲線由多少個點構成?缺省默認為10000個
*/
void?myOutXYZ(float?*_InputAllDataPointer?int?_NumOfKeyPoint?float?_Input_Proportion/*百分比*/?float?*?&_OutputXYZ?int?_NumOfLinePts?=?10000);
void?myOutVec(std::vector?&_InputPoints?int?_NumOfKeyPoint?float?_Proportion?POINT3D?&_Output3DPt?int?_NumOfLinePts);
//貝塞爾曲線
void?drawCurve(int?_n?float?_t?std::vector?_InputKeyPoints?POINT3D?&_Pt3D?int?_line_pts_num);
int?main()?{
//??5?為?點的數量???3?為?三維
float?arr[5?*?3]?=?{?1?1?1
2?2?2
3?1?3
0?0?4
4?4?4};
float?*?result?=?new?float[3];
//
myOutXYZ(arr?5?30.0?result);
std::cout?< std::cout?< std::cout?<
delete[]?result;
result?=?NULL;
return?0;
}
void?myOutXYZ(float?*_InputAllDataPointer?int?_NumOfKeyPoint?float?_Input_Proportion?float?*?&_OutputXYZ?int?_NumOfLinePts)?{
std::vector?InputPoints;
POINT3D?tempMyPt3D;
for?(int?i?=?0;?i?
tempMyPt3D.x?=?_InputAllDataPointer[i++];
tempMyPt3D.y?=?_InputAllDataPointer[i++];
tempMyPt3D.z?=?_InputAllDataPointer[i++];
InputPoints.push_back(tempMyPt3D);
}
int?g_pts_nums?=?InputPoints.size();?
POINT3D?OUTPUT_3DPT;
myOutVec(InputPoints?g_pts_nums?_Input_Proportion?OUTPUT_3DPT?_NumOfLinePts);
_OutputXYZ[0]?=?OUTPUT_3DPT.x;
_OutputXYZ[1]?=?OUTPUT_3DPT.y;
_OutputXYZ[2]?=?OUTPUT_3DPT.z;
}
void?myOutVec(std::vector?&_InputPoints?int?_NumOfKeyPoint?float?_Proportion?POINT3D?&_Output3DPt?int?_NumOfLinePts)
{
if?(_Proportion?>?100?&&?_Proportion?0)?{
//?報錯?
return;
}
POINT3D?Start_3DPt;
POINT3D?End_3DPt;
float?Totallylength?=?0.0;
std::vector?OutputLinePoints;
if?(_NumOfKeyPoint?>=?3)?{
for?(int?i?=?0;?i?
評論
共有 條評論