如何进行笛卡尔变换

时间:2015-08-06 06:52:26

标签: c++ geometry coordinate-transformation

我被引导相信笛卡尔变换是我需要的,但我不确定。这是我的问题。

我有两个坐标系统,一个是全局x,y,另一个是局部i,j,k,它存在于x,y,z中

我知道全局内部本地系统的原点位置。我们将其标记为B.

我知道沿着轴i和j还有两个点C和E.意味着我的轴i可以由线BC定义,轴j由线BE定义。轴k将垂直于2D平面i,j

如何将一个系统的坐标转换为另一个系统。

例如说我知道D {x,y,z},我知道D存在于局部坐标系中,我如何得到D {i,j,k}?另外我怎么回到另一个方向?

如何: D {x,y,z}< - > d {I,J,K}

1 个答案:

答案 0 :(得分:2)

仿射变换由3×1平移向量 B 和3×3旋转矩阵 E 定义。现在,您希望获取本地点public interface ArticleGetListService { @FormUrlEncoded // Request will have "application/x-www-form-urlencoded" MIME type @POST("/api/Article/ArticleGetList") public void getArticleList(@Field("LanguageCode") String languageCode, @Field("CategoryId") String categoryId, @Field("Token") String token, Callback<ArticleViewPojo> response); //POJO: The json retrieved from the server is added to this class. } 并将其转换为全局点 RestAdapter restAdapter = new RestAdapter.Builder() .setLogLevel(RestAdapter.LogLevel.FULL) .setEndpoint(baseUrl) .build(); ArticleGetListService articleGetListService = restAdapter.create(ArticleGetListService.class); Callback<ArticleViewPojo> callback = new Callback<ArticleViewPojo>() { @Override public void success(ArticleViewPojo model, Response response) { //use model which is data returned to you } @Override public void failure(RetrofitError error) { //handle error } }; //START REST CALL articleGetListService.getArticleList(languageCode, categoryId, token, callback); //above parameters are those written in service interface at 1 //Whole Url is baseUrl+ArticleGetListService in above example 。这是由

完成的
P=(i_P,j_P,k_P)
  1. 翻译很简单,P'=(x_P,y_P,z_P)
  2. 旋转矩阵定义为单位向量 P' = B + E * P B=(B_x, B_y, B_z)i的全局坐标,作为矩阵的三列。

    j
  3. 要查找这些组件,请使用点k | i_x j_x k_x | E = | i_y j_y k_y | | i_z j_z k_z | B=(B_x, B_y, B_z)

    的坐标
    1. C B 之间的差异,并使其成为C=(C_x, C_y, C_z)的单位向量。找到它们之间的距离为

      E=(E_x, E_y, E_z)

      ,组件是:

      i
    2. E B 之间的差异,并使其成为d_BC = sqrt( (B_x-C_x)^2 + (B_y-C_x)^2 + (B_z-C_z)^2 ); 的单位向量。找到它们之间的距离为

      i_x = (C_x-B_x)/d_BC;
      i_y = (C_y-B_y)/d_BC;
      i_z = (C_z-B_z)/d_BC;
      

      ,组件是:

      j
    3. 使用矢量叉积d_BE = sqrt( (B_x-E_x)^2 + (B_y-E_x)^2 + (B_z-E_z)^2 ); 找到j_x = (E_x-B_x)/d_BE; j_y = (E_y-B_y)/d_BE; j_z = (E_z-B_z)/d_BE; 的组件

      k
    4. 现在完全转型

      k = i × j

      修改1

      逆向转换是

      k_x = i_y*j_z - i_z*j_y;
      k_y = i_z*j_x - i_x*j_z;
      k_z = i_x*j_y - i*y*j_x;
      

      其中x_P = B_x + i_x*i_P + j_x*j_P + k_x*k_P; y_P = B_y + i_y*i_P + j_y*j_P + k_y*k_P; z_P = B_z + i_z*i_P + j_z*j_P + k_z*k_P; 是3×3矩阵 P = E'*(P'-B) 的转置。在组件形式中,这是

      E'