首页 > 其他分享 >DirectX3D中将用点构成的线段进行平移和旋转

DirectX3D中将用点构成的线段进行平移和旋转

时间:2024-03-30 12:01:09浏览次数:31  
标签:平移 routePoints 用点 DirectX3D 线段 旋转 %. 坐标 data

将这一系列(x,y,z)平移 (5, 0, 0),然后再绕y轴旋转45度

clc;
clear;
% 从文件中读取坐标数据
data = load('coordinates.txt'); % 假设文件名为 coordinates.txt,包含 x、y 和 z 坐标

% 获取 x、y 和 z 坐标
x = data(:, 1);
y = data(:, 2);
z = data(:, 3);

% 将坐标组合成路线点
routePoints = [x, y, z];

% 设置旋转角度和平移量
rotationAngle = deg2rad(45); % 将角度转换为弧度
translationVector = [5.0, 0.0, 0.0]; % 平移量为 (5, 0, 0)

% 创建旋转矩阵(绕Y轴旋转45度)
rotationMatrix = makehgtform('yrotate', rotationAngle);

% 创建平移矩阵
translationMatrix = makehgtform('translate', translationVector);

% 组合矩阵(先平移,再旋转)
transformMatrix = rotationMatrix * translationMatrix;

% 对路线上的每个点应用变换
for i = 1:size(routePoints, 1)
    % 将点表示为齐次坐标
    point = [routePoints(i, :) 1];
    
    % 应用变换
    transformedPoint = transformMatrix * point';
    
    % 更新路线上的点
    routePoints(i, :) = transformedPoint(1:3)';
end

% 打开文件以供写入
fileID = fopen('coordinates_end.txt', 'w');

% 将点坐标写入文件
for i = 1:size(routePoints, 1)
    fprintf(fileID, '%.6f,%.6f,%.6f,\n', routePoints(i, 1), routePoints(i, 2), routePoints(i, 3));
end

% 关闭文件
fclose(fileID);

变化前

在这里插入图片描述

变化后

在这里插入图片描述

将这一系列(x,y,z)平移 (-5, 0, 0),然后再绕y轴旋转-45度

clc;
clear;
% 从文件中读取坐标数据
data = load('coordinates_end.txt'); % 假设文件名为 coordinates.txt,包含 x、y 和 z 坐标

% 获取 x、y 和 z 坐标
x = data(:, 1);
y = data(:, 2);
z = data(:, 3);

% 将坐标组合成路线点
routePoints = [x, y, z];

% 设置旋转角度和平移量
rotationAngle = deg2rad(-45); % 将角度转换为弧度
translationVector = [-5.0, 0.0, 0.0]; % 平移量为 (-5, 0, 0)

% 创建旋转矩阵(绕Y轴旋转45度)
rotationMatrix = makehgtform('yrotate', rotationAngle);

% 创建平移矩阵
translationMatrix = makehgtform('translate', translationVector);

% 组合矩阵(先平移,再旋转)
transformMatrix = rotationMatrix * translationMatrix;

% 对路线上的每个点应用变换
for i = 1:size(routePoints, 1)
    % 将点表示为齐次坐标
    point = [routePoints(i, :) 1];
    
    % 应用变换
    transformedPoint = transformMatrix * point';
    
    % 更新路线上的点
    routePoints(i, :) = transformedPoint(1:3)';
end

% 打开文件以供写入
fileID = fopen('coordinates_end1.txt', 'w');

% 将点坐标写入文件
for i = 1:size(routePoints, 1)
    fprintf(fileID, '%.6f,%.6f,%.6f,\n', routePoints(i, 1), routePoints(i, 2), routePoints(i, 3));
end

% 关闭文件
fclose(fileID);

变化前

在这里插入图片描述

变化后

在这里插入图片描述

标签:平移,routePoints,用点,DirectX3D,线段,旋转,%.,坐标,data
From: https://blog.csdn.net/qq_45783660/article/details/137119262

相关文章

  • P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并
    P4556[Vani有约会]雨天的尾巴/【模板】线段树合并在这题里面讲一下线段树合并。顾名思义就是把多个线段树合并成一个。显然完全二叉线段树(也就是普通线段树)是无法更高效的合并的,只能把所有节点加起来建个新树。但是在动态开点线段树中,有时候一个树只有几条链,这时候我们就是可......
  • 线段树 动态开点
    红色圈出来的4个点就是查出来的其中两个?圈是没有被开出来的区间就是0,其实答案就是[3,3]+[6,8]动态开点模板:structTree{intl,r,n,ls,rs;}voidupdate(int&t,intl,intr,intpos,intn){if(!t){t=++cnt;tree[t].......
  • 动态开点线段树
    求区间最值importsyssys.setrecursionlimit(1000000)classNode:__slots__=["left","right","val","tag"]def__init__(self,left=None,right=None,val=0,tag=0):self.left=leftself.righ......
  • 3/28 线段树优化建图
    (1)CF786BLegacy有一张\(n\)个节点和若干条边。边用\(q\)条信息表示:1vuw表示有一条连接\(v\tou\)的有向边,边权为\(w\);2vlrw表示对于所有\(u\in[l,r]\),都有一条连接\(v\tou\)的有向边,边权为\(w\);3vlrw表示对于所有\(u\in[l,r]\),都有......
  • 写模板,线段树
    1意义:线段是是为了对区间中的元素进行操作,而衍生出来的一种数据结构,比如区间加减,区间求和。线段树将1~n的区间分解成4n个小区间。2过程:区间修改就是对一个或者多个节点按照设定的规则对数值进行修改。区间查询就是对一个或多个节点查询的结果按规则进行合并,得到最终结果。其......
  • 24/3/27 线段树
    (1)P4145上帝造题的七分钟2/花神游历各国水。$\color{blue}\text{Code}$#include<iostream>#include<cmath>usingnamespacestd;#defineintlonglongconstintN=1000010;intn,m,a[N],k,l,r;#definels(u<<1)#definers(u<<......
  • 权值线段树
    与普通线段树并无其他区别,只不过存储的信息是每个值出现的次数罢了理解图importsysinput=lambda:sys.stdin.readline()classTree:def__init__(self,N):self.cnt=[0for_inrange(N)]defupdate(self,root,l,r,x,cnt):ifl=......
  • P3924 康娜的线段树
    首先考虑每一个\(a_i\)(叶子结点)对于总期望值有多少贡献。不妨以区间\([1,8]\)建线段树,看看\(a_i=4\)的贡献是多少:区间\([1,8]\)的\(sum\)里包含一个\(4\);你一定会进入这个区间,贡献\(4\times1=4\)。区间\([1,4]\)的\(sum\)里包含一个\(4\);你有\(50\%\)概率进......
  • 线段树I
    线段树I题目链接P3372【模板】线段树1-洛谷|计算机科学教育新生态(luogu.com.cn)模板代码importsysinput=lambda:sys.stdin.readline()classNode:def__init__(self):self.val=0self.tag=0classTree:def__init__(self,......
  • CF1420D & 102012G [线段交集问题]
    CF1420DRescueNibel!首先要发现一个性质:如果一些线段有交集,那么交集一定是条线段,并且一定有其中一条线段的左端点是交集的左端点。所以方案可以转化为求其中一条线段的左端点是交集的左端点的方案数。这启发我们枚举每个点作为交集的左端点,计算至少有一条线段的左端点是这个......