- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个复杂的问题,它涉及到我对数学的理解,但我对此没有信心。
一些轻微的背景信息可能会有所帮助。我正在为 child 构建一个 3D 火车模拟器,它将使用 WebGL 在浏览器中运行。我正在尝试创建一个点网络来放置轨道 Assets (见图)并为火车移动提供引用。
为了帮助解释我的问题,我创建了一个视觉表示,因为我是一名可以编写脚本的设计师,而不是真正的程序员或数学家:
基本上,我有 3 个形状(图 A、B 和 C),尽管它们有宽度,但可以表示为 A 的直线和曲线(B 和 C)。曲线 B 和 C 源自 A(经过弯曲修改),因此长度 (l) 均相同,即 112。曲线 (B 和 C) 的半径 (r) 均为 285.5,弯曲角度 (a) 也相同为 22.5°。
每个形状(A、B 和 C)都有一个注册点(起点),如每个形状所附的绿色框的中心所示。
我想做的是创建一个从 0, 0 开始的“轨道”网络(使用标准笛卡尔坐标)。
我的问题是在曲线之后放置下一个元素的位置。如果它是直线轨道,那么就没有问题,因为我可以使用长度作为沿 y 轴的恒定偏移,但这会很无聊,所以我需要添加曲线。
图。 D. 演示了可能的轨道布局的示例,但请理解,我并不是在寻找静态答案(基于图像中所有内容的位置),我需要一个无论我如何配置轨道都可以应用的公式。
使用图 D。我尝试找出在第一个弯曲元素之后放置第二个弯曲元素的位置。我使用公式在给定圆心坐标和半径的情况下绘制圆的圆周上的点(图 E.)。
我有第 1 点,因为这只是设置直线长度(y 位置)的情况。我可以轻松算出圆心,因为这只是 y 位置偏移、半径 (r)(x 位置)偏移和始终为 22.5° 的角度 (a)(顺便说一下,它已转换为弧度)根据公式要求)。
通过公式传递这些值后,我没有得到正确的结果,因为公式假设我从 3 点钟开始逆时针工作,所以我必须从 (a) 中扣除 180 并将其转换为弧度得到预期的结果。
这确实有效,如果我想创建 180° 轨道曲线,我可以使用相同的中心点,每次只需从角度中扣除 22.5°。伟大的。但我想要一个更动态的轨道布局,如图所示。 D&E。
那么,我该如何处理图 E 中的工作点 5,因为它代表该曲线段的中心点?我根本不知道。
另外,作为一个额外的问题,这是这样做的正确方法还是我使事情过于复杂?
这个问题是阻止我构建游戏的唯一问题,正如您所理解的,它有点大,所以我提前感谢任何人的贡献。
最佳答案
当您构建轨道时,要放置的下一段轨道的位置需要相对于轨道当前末端的位置和方向。
我将存储一个 (x
,y
) 位置和一个角度 a
来指示当前点(使用 x
,y
从 0 开始,a
从 pi/2 弧度开始,对应于“从 3 点钟开始逆时针”系统中的直线向上) .
然后构造
fx = cos(a);
fy = sin(a);
lx = -sin(a);
ly = cos(a);
对应于相对于我们当前面向的方向的“向前”和“向左”向量的 x 和 y 分量。如果我们想将位置向前移动一个单位,我们可以将 (x,y) 增加 (fx, fy)。
在您的情况下,放置直线部分的规则是:
x=x+112*fx
y=y+112*fy
放置曲线的规则稍微复杂一些。对于右转的曲线,我们需要向前移动112*sin(22.5°),然后向右侧步112*(1-cos(22.5°),然后顺时针旋转22.5°。在代码中,
x=x+285.206*sin(22.5*pi/180)*fx // Move forward
y=y+285.206*sin(22.5*pi/180)*fy
x=x+285.206*(1-cos(22.5*pi/180))*(-lx) // Side-step right
y=y+285.206*(1-cos(22.5*pi/180))*(-ly)
a=a-22.5*pi/180 // Turn to face new direction
左转就像右转一样,但角度为负。
要放置后续部件,只需再次运行此过程,计算 fx
、fy
、lx
和 ly
使用现在更新的 a
值,然后根据接下来的轨道片段类型递增 x
和 y
。
您还可以考虑另一点;根据我的经验,如果您坚持进行 90° 转弯或更对称的布局,则用此类部件构建形成闭环的轨道通常会起作用。然而,制作不完全连接的轨道是很容易的,并且不明显看出应该如何修改它们以允许它们连接。如果您的程序允许 children 设计自己的布局,也许需要记住一些事情。
关于math - 如何计算已知半径和圆心的圆上的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14359823/
SQL 和一般开发的新手,我有一个表(COUNTRIES),其中包含字段(INDEX、NAME、POPULATION、AREA) 通常我添加一个客户端(Delphi)计算字段(DENSITY)和 On
我想使用 calc(100%-100px),但在我的 demo 中不起作用由于高度只接受像素,因此如何将此百分比值转换为像素。 最佳答案 以下将为您提供高度: $(window).height();
我正在尝试在 MySQL 中添加列并动态填充其他列。 例如我有一张表“数字”并具有第 1 列、第 2 列、第 3 列,这些总数应填充在第 4 列中 最佳答案 除非我误解了你的问题,否则你不只是在寻找:
我想返回简单计算的结果,但我不确定如何执行此操作。我的表格如下: SELECT COUNT(fb.engineer_id) AS `total_feedback`, SUM(fb.ra
我一直在尝试做这个程序,但我被卡住了,我仍然是一个初学者,任何帮助将不胜感激。我需要程序来做 打印一个 10 X 10 的表格,其中表格中的每个条目都是行号和列号的总和 包含一个累加器,用于计算所有表
这个计算背后一定有一些逻辑。但我无法得到它。普通数学不会导致这种行为。谁能帮我解释一下原因 printf ("float %f\n", 2/7 * 100.0); 结果打印 1.000000 为什么会
我想计算从 0 到 (n)^{1/2} - 1 的数字的 AND每个数字从 0 到 (n)^{1/2} - 1 .我想在 O(n) 中执行此操作时间,不能使用 XOR、OR、AND 运算。 具体来说,
如何在 Excel 中将公式放入自定义数字格式?例如(出于说明目的随机示例), 假设我有以下数据: 输入 输出 在不编辑单元格中的实际数据的情况下,我想显示单元格中的值除以 2,并保留两位小数: 有没
每次我在 Flutter 应用程序中调用计算()时,我都会看到内存泄漏,据我所知,这基本上只是一种生成隔离的便捷方法。我的应用程序内存占用增加并且在 GC 之后永远不会减少。 我已将我的代码简化为仅调
我有数字特征观察 V1通过 V12用于目标变量 Wavelength .我想计算 Vx 之间的 RMSE列。数据格式如下。 每个变量“Vx”以 5 分钟的间隔进行测量。我想计算所有 Vx 变量的观测值
我正在寻找一种使用 C 语言计算文件中未知字符数的简单方法。谢谢你的帮助 最佳答案 POSIX 方式(可能是您想要的方式): off_t get_file_length( FILE *file ) {
我正在使用 Postgres,并且我正试图围绕如何在连续日期跨度中得出第一个开始日期的问题进行思考。例如 :- ID | Start Date | End Date =================
我有一个订单表格,我在其中使用 jQuery 计算插件来汇总总数。 此求和工作正常,但生成的“总和”存在问题。总之,我希望用逗号替换任何点。 代码的基础是; function ($this) {
我在使用 double 变量计算简单算术方程时遇到问题。 我有一个具有 double 属性 Value 的组件,我将此属性设置为 100。 然后我做一个简单的减法来检查这个值是否真的是 100: va
我在这里看到了一些关于 CRC 32 计算的其他问题。但没有一个让我满意,因此是这样。 openssl 库是否有任何用于计算 CRC32 的 api 支持?我已经在为 SHA1 使用 openssl,
当我在PHP日期计算中遇到问题时,我感到惊讶。 $add = '- 30 days'; echo date('Y-m-01', strtotime($add)); // result is 2017-
我正在使用 javascript 进行练习,我编写了这个脚本来计算 2 个变量的总和,然后在第三个方程中使用这个总和!关于如何完成这项工作的任何想法都将非常有用! First Number:
我有一个来自EAC的提示单和一个包含完整专辑的FLAC文件。 我正在尝试制作一些python脚本来播放文件,因为我需要能够设置在flac文件中开始的位置。 如何从CueSheet格式MM:SS:FF转
这个问题已经有答案了: Adding two numbers concatenates them instead of calculating the sum (24 个回答) 已关闭去年。 我有一个
4000 我需要上面字段 name="quantity" 和 id="price" 中的值,并使用 javascript 函数进行计算,并将其显示在字段 id= 中仅当我单击计算按钮时才显示“总
我是一名优秀的程序员,十分优秀!