Coord ParamDistortion::ComputePosWithBarycentric(const std::vector<Coord>& vtx_coord_array, Coord barycentric)
	{
		assert(vtx_coord_array.size() == 3);
		zjucad::matrix::matrix<double> pos_matrix(3, 3);
		for(size_t i=0; i<3; ++i)
			for(size_t j=0; j<3; ++j) pos_matrix(i, j) = vtx_coord_array[j][i];
		zjucad::matrix::matrix<double> barycentric_matrix(3, 1);
		for(size_t i=0; i<3; ++i) barycentric_matrix(i, 0) = barycentric[i];

		zjucad::matrix::matrix<double> res_matrix = pos_matrix * barycentric_matrix;

		return Coord(res_matrix(0, 0), res_matrix(1, 0), res_matrix(2, 0));
	}
Beispiel #2
0
    bool isInterleave(string s1, string s2, string s3) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int len1=s1.size(),len2=s2.size(),len3=s3.size();
        if((len1+len2)!=len3)
            return false;
        vector<vector<unsigned char> > res_matrix(len1+1,vector<unsigned char>(len2+1,0));

        res_matrix[0][0]=1;

        for(int i=1; i<len1+1; i++) {
            if(s1[i-1]==s3[i-1])
                res_matrix[i][0]=1;
            else
                break;
        }

        for(int i=1; i<len2+1; i++) {
            if(s2[i-1]==s3[i-1])
                res_matrix[0][i]=1;
            else
                break;
        }

        for(int i=0; i<len1; i++) {
            for(int j=0; j<len2; j++) {
                if(res_matrix[i][j+1]&&s1[i]==s3[i+j+1])
                    res_matrix[i+1][j+1]=1;
                else if(res_matrix[i+1][j]&&s2[j]==s3[i+j+1])
                    res_matrix[i+1][j+1]=1;
            }
        }

        return (bool)res_matrix[len1][len2];
    }