4D 到 3D 透视投影

2023-12-03

我正在尝试计算 3D 世界中 4D 点的位置。我从 2D 开始,尝试将其扩展到 3D,然后再扩展到 4D。首先,我发现计算直线上二维点的投影位置很容易。

Whoops, there should be () in the first equation: x/(a+y)

现在我发现,如果我将 P(X,Y,Z) 拆分为 P1(X,Z) 和 P2(Y,Z),计算它们的 Q,然后构建一个点,这同样适用于 3D 世界P'(Q1,Q2)(假设我从 C(0,-a) 点看 Z 轴正无穷大并渲染到 XY 平面)。

nx = (a*x)/(a+z);
ny = (a*y)/(a+z);

然后我想这就像添加下一个点 P3 一样简单,并想出了

nx = (a*x)/(a+z);
ny = (a*y)/(a+z);
nw = (a*w)/(a+z);

我觉得这很奇怪,因为 A(新轴)实际上只影响最后一点的 Z,而参考超正方体它应该影响所有维度......

这是行不通的,所以我想问你是否可以提供一些我做错了什么的细节。我很确定这是“点分裂”问题,并且方程应该更复杂。请不要用矩阵和四元数来攻击我。我只想在 (0,-1) 处有一个简单的静态摄像机看着 (0,0)...

谢谢你的帮助!


  • in 2D(x,y) y=0 上的投影表示线与线的交点:

    x'/a = x/(a+y)
    
  • in 3D(x,y,z) z=0 上的投影表示直线与平面的交点:

    for y=0: x'/a = x/(a+z)
    for x=0: y'/a = y/(a+z)
    
  • in 4D(x,y,z,w) w=0 上的投影表示直线与超平面的交点:

    for y=0, z=0: x'/a = x/(a+w)
    for x=0, z=0: y'/a = y/(a+w)
    for x=0, y=0: z'/a = z/(a+w)
    
  • ...等等

或者,可以使用参数形式计算直线和超平面的交集,其中直线由以下形式描述:

[px,py,pz,pw] = [p0x,p0y,p0z,p0w] + t * [p1x,p1y,p1z,p1w]

其中参数 t 是任意数字

超平面描述为:

[hx,hy,hz,hw] = [h0x,h0y,h0z,h0w] + a * [h1x,h1y,h1z,h1w] + b * [h2x,h2y,h2z,h2w] + c * [h3x,h3y,h3z,h3w]

现在可以通过求解找到交点:

[px,py,pz,pw] = [hx,hy,hz,hw]

或更明确:

[p0x,p0y,p0z,p0w] + t * [p1x,p1y,p1z,p1w] = [h0x,h0y,h0z,h0w] + a * [h1x,h1y,h1z,h1w] + b * [h2x,h2y,h2z,h2w] + c * [h3x,h3y,h3z,h3w]

有 4 个方程(每个维度 x、y、z、w 一个)和 4 个未知数(a、b、c、t),除非直线平行于超平面,否则可以求解这些方程。

上述思想受到解析几何的影响4D(其中 w 分量代表自己的单独维度)并且它们不应与齐次坐标混淆(其中w组件用于将平移/投影集成到4D矩阵并在图形管道末端附近被透视划分丢弃)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4D 到 3D 透视投影 的相关文章

  • 按下按钮并在java中的新窗口中打开文件

    我创建了一个 JFrame 并放置了一个文本字段和按钮 在文本字段中我放置了从文本文件读取的名称 我知道我想单击按钮并打开一个已知窗口 我想在其中放置名称 其他信息来自同一个文件 这是我的代码 这是我的主框架 package Fronten
  • Netbeans 8.1 Gnome 3 GTK+ UI 字体和选项卡高度

    我刚刚在运行 GNOME 3 桌面的 Ubuntu 16 04 上安装了 NetBeans 8 1 如果可能的话 我想继续使用 IDE 的 GTK 外观和感觉 但 UI 上的字体 尤其是选项卡中的字体 太小且重叠 我尝试添加 fontsiz
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • Android:文本淡入和淡出

    我已阅读此 stackoverflow 问题和答案 并尝试实现文本淡入和淡出 Android中如何让文字淡入淡出 https stackoverflow com questions 8627211 how to make text fade
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 断言 Kafka 发送有效

    我正在使用 Spring Boot 编写一个应用程序 因此要写信给 Kafka 我这样做 Autowired private KafkaTemplate
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • 为什么\0在java中不同系统中打印不同的输出

    下面的代码在不同的系统中打印不同的输出 String s hello vsrd replace 0 System out println s 当我在我的系统中尝试时 Linux Ubuntu Netbeans 7 1 它打印 When I
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • Objective-c 中的 AES256 解密问题

    我正在尝试使用以下代码片段来解密文件 该文件是使用 32 字节密钥加密的 因此 当我尝试加密文件数据时 一切正常 但是当我尝试解密时 程序甚至没有通过条件if cryptStatus kCCSuccess 在 CryptoExtension
  • 使用 Visual Studio 或 TFS 在项目之间共享资源(图像/css/js)

    有没有一种有效的方法可以在不同项目之间共享视觉资源 这包括图像 CSS 和 JavaScript 我查看了以下 Stack Overflow 问题 但似乎没有回答这个问题 在 Visual Studio 中的不同项目之间共享 css jav
  • 突出显示一行时是否触发任何事件?

    我创建了一个 ListView 来显示文档列表 然后创建了一个按钮 按钮 A 来执行一些操作 我的要求是我希望按钮状态可以随着所选文档的更改而更改 Fox示例 下图中有三个文档 我希望当我单击Order 00001或Order 00002时
  • 仅从文件的完整路径获取文件名

    我想分割路径 只保存文件名test xls在一个新变量中 namearray C Users z003m Desktop Service Tickets automationscript vbs Newfolder test xls 推荐使
  • Euler 23 在 C# 中:0.2 秒,在 F# 中:30.5 秒。为什么?

    我对这个问题的 F 解决方案不太满意 因为我找不到一个漂亮且快速的解决方案 但这不是这里的问题 问题是 我将解决方案翻译成 C 而且速度很快 就像 相对而言 速度非常快 我不明白为什么 是的 我去过 Reflector C 代码看起来很相似
  • XDebug 真的很慢

    我正在尝试让 XDebug 在我的本地 wamp 安装 Uniform Server 8 上运行 但是当我把xdebug remote enable 1 在我的 php ini 中 这是我的 IDE 使用 xdebug 所必需的 加载页面变
  • WPF 无边框窗口的 DropShadow

    我有一个 WPF 窗口 WindowStyle 设置为 none 有什么方法可以强制这个窗口留下阴影 就像 WindowStyle 不是 none 时得到的阴影一样 我不想将AllowTransparency 设置为true 因为它会影响性
  • 检测 Javascript 中字符串中的重复字母

    用于检测字符串中重复字母的代码 var str paraven4sr var hasDuplicates a zA Z 1 test str alert repeating string hasDuplicates 我正进入 状态 fals
  • 如何在Python中模糊匹配数组列中的项目?

    我有一系列来自 NCAA 的球队名称 以及与其相关的统计数据 学校名称通常会被缩短或完全省略 但名称的所有变体通常都有一个共同元素 例如阿拉巴马州赤潮与赤潮 这些名称全部包含在一个数组中 没有特定的顺序 我希望能够通过模糊匹配来获取团队名称
  • 在“for”循环中读取带有空格、制表符和多个输入文件的完整行

    我看过以下文章 for 环形 它会在出现空格 制表符或换行符等空白时进行分割 为了解决这个问题 我有以下额外的命令 IFS n 但是当我尝试根据以下细节解决上述场景时 我有两个文件 输入1 txt and 输入 txt 在我当前的目录中 b
  • 在 ruamel.yaml 迭代期间获取评论

    当我迭代 YAML 对象时如何获取注释 yaml YAML with open path r as f yaml data yaml load f for obj in yaml data how to get the comments h
  • Wordpress 的 nginx 配置位于同一服务器的 Rails 应用程序的子目录中

    当我尝试访问 example com blog 时 我不断收到 文件未找到 错误 并且在 var log nginx error log FastCGI sent in stderr Primary script unknown while
  • 返回一个随机偶数

    我有以下几种方法 rnd 方法返回两个边界之间的单个随机整数 Create next batch of 55 random numbers void advance random int j1 double new random for j
  • 文件上传控制和 GWT 外观

    我正在编写我的第一个 GWT 项目 我有一个带有标签 文件上传控件和上传按钮的表单 但它们在各种网络浏览器中看起来很糟糕并且差异很大 另外 文件上传控件中的按钮与 GWT 按钮控件的样式不同 另一个问题是 在 Chrome 中 文件选择按钮
  • Android Widget 在更新期间显示奇怪的图像

    我这里有一个奇怪的 我有一台配备 Nextel 的 Motorola i1 运行 Android 1 5 我有一个安卓小部件 当我开始运行更新此小部件的服务时 我看到来自另一个小部件的图像 启动 DC Contact 它在我的小部件的位置显
  • 使用 Newton-Raphson 方法在 C 中求平方根

    在下面的代码中 我想将终止条件替换为 如果猜测平方与x的比率接近1 则while循环应该终止 我尝试了各种表达式 但没有一个能够正确运行代码 有什么建议吗 include
  • R:带有 geom_map 的 ggplot2 返回“x 和单位必须具有长度 > 0”错误,尽管值已转换为因子

    我正在开发一个原始的闪亮应用程序 它将映射来自苏格兰开放数据项目 我制定了 SPARQL 查询 用于生成类似于下面提供的摘录的数据框 dz label overall quantiles S010001 8 S010002 9 我有强化的形
  • 从 XCode 调用本地 HTML 文件时出现问题

    这是我的 WebView 代码 webView loadRequest NSURLRequest requestWithURL NSURL fileURLWithPath NSBundle mainBundle pathForResourc
  • Android SpeechRecognizer 只能在应用程序的主线程中使用

    我正在尝试将一些 Android 语音 API 集成到我的基于 AndEngine 的游戏中 我将代码放在 BaseGame 活动中 但是在运行时出现此错误 05 06 23 51 28 955 错误 AndroidRuntime 553
  • 4D 到 3D 透视投影

    我正在尝试计算 3D 世界中 4D 点的位置 我从 2D 开始 尝试将其扩展到 3D 然后再扩展到 4D 首先 我发现计算直线上二维点的投影位置很容易 Whoops there should be in the first equation