- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个均匀的环,沿着我的视线倾斜一定角度。戒指的尺寸为:
9.5 : inner radius
10.5 : outer radius
-3 to 3 : height of the ring
环上分布着许多源,我正在尝试计算从每个源绘制的线是否沿着我的方向穿过该环。如果它穿过环,它会表现出穿过该环的路径长度是多少(例如,穿过环两次或一次或从未穿过)。
我有从每个源到我的视线的方向 vector ,并且我使用简单的 vector 加法沿着我的方向递增。
我的程序有问题:
它仅检查路径长度是否小于环的外半径。如何检查我的源是否通过了两个环?
任何帮助将不胜感激!!
我的程序:
/********************************************************************
xn, yn, zn : coordinates of the sources
ns_ux, ns_uy, ns_uz : unit vectors for these sources
ns : distance of a source from the sun
int_val : path length
********************************************************************/
int main(){
FILE *fp=NULL;
fp=fopen("Av_path.txt","w");
int k,number=9;
float step=0.02;
float ns_ux[number],ns_uy[number],ns_uz[number],xn[number], yn[number],zn[number],l[number],b[number],ns[number],int_val,x_comp,y_comp,z_comp,radial;
FILE* val= NULL;
val=fopen("novae_uniform_unitvectors.txt", "r");
for(k=0;k<=(number-1);k++){
fscanf(val,"%f %f %f %f %f %f %f %f %f", &xn[k], &yn[k], &zn[k], &ns_ux[k], &ns_uy[k], &ns_uz[k], &l[k], &b[k], &ns[k]);
float u=0.;
do {
u=u+step;
printf("%f\t%f\n" ,u,radial);
x_comp=xn[k]+u*ns_ux[k];
y_comp=yn[k]+u*ns_uy[k];
z_comp=zn[k]+u*ns_uz[k];
radial=pow((x_comp*x_comp+y_comp*y_comp+z_comp*z_comp),0.5);
}while (radial <10.5);
if(u >= 1.0 && z_comp >= -3.0 && z_comp <= 3.0){
int_val=1.0; // ring's width is only 1 unit
}
else if(u < 1.0 && z_comp >= -3.0 && z_comp <= 3.0) {
int_val=u-step;
}
else {
int_val=0.;
}
fprintf(fp, "%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n",xn[k], yn[k], zn[k], ns[k], l[k], b[k], radial,z_comp,u,u/step, int_val);
}
return 0.;
}
最佳答案
我在将您的文本与代码结合起来时遇到一些问题。查看代码,我看到 (xn, yn, zn)
处有一个点,以及从该点沿 (ns_ux, ns_uy, ns_uz)
方向发出的射线。我认为您想知道光线何时何地与您的环相交。
目前,您正在执行一些非常令人讨厌的循环来找到甚至一个交点。让我们让它变得更优雅。您正在寻找一些u
,例如sqrt(x_comp²+y_comp²+z_comp²)=10.5
。这要求光线与球体相交的点,因此如果您想要一个圆柱体,您可能需要删除三个坐标之一。我现在会坚持使用球体,但这很容易适应。
对该方程要做的第一件事是对两边进行平方:x_comp²+y_comp²+z_comp²=10.5²
。现在,您可以将该平方和解释为 vector v
与其自身的点积:v∙v = 10.5²
。但该 vector v
实际上是位置 n
加上 u
乘以某个 vector ns_u?
,我称之为s
,因此您有 (n + u*s)∙(n + u*s)=10.5²
。现在您可以利用分配律可以应用于点积的事实,因为它是双线性的。所以你也可以写成
(n∙n - 10.5²) + (2n∙s)u + (s∙s)u² = 0
这是 u
中的二次方程,您可以使用二次公式求解。在代码中你会有
nn = xn*xn + yn*yn + zn*zn;
ns = xn*sn_ux + yn*sn_uy + zn*sn_uz;
ss = sn_ux*sn_ux + sn_uy*sn_uy + sn_uz*sn_uz;
r = 10.5;
a = ss;
b = 2*ns;
c = nn - r*r;
d = b*b - 4*a*c;
if (d < 0) {
// doesn't intersect sphere of radius r at all, but passes outside.
} else if (d == 0) {
// tangential to sphere, numerically extremely unlikely
// so you might want to merge this case with the one below.
} else {
// two points of intersection, parametrized by u1 and u2.
sqrtd = sqrt(d);
u1 = (-b+sqrtd)/(2*a);
u2 = (-b-sqrtd)/(2*a);
}
上面的直线与球体相交。如果你想要一条射线,你会限制自己的解决方案u≥0
。您可能希望对较小的半径执行相同的计算。一条与较大球体相交于两点但与较小球体完全不相交的射线将仅穿过这两个球体之间的区域一次。所有这些都假设是完整的球体;您仍然需要应用该厚度约束来查看光线在环的高度之外穿过的位置。我无法提供更多详细信息,因为我还没有完全理解您在这方面的问题,但我希望上述内容足以帮助您自行解决该问题。如果您想要圆柱体而不是球体,只需从上述计算中删除所有 z
分量即可。
关于c - (C 程序) 倾斜穿过环的视线 : calculating the path length along my line of sight from sources around this ring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065447/
我有以下代码: 我要串联 properties.linkType至 properties.targetURL . 任何想法如何做到?我在网上找到了一些例子,但它们似乎不适用于我的用例。 最佳答案 这
我想知道是否有办法创建自定义属性,例如: 就像自定义 JSP 标签一样。 编辑: 根据 this blog 截至 2014 年 5 月 4 日,这是不可能的。有这方面的消息吗? 最佳答案 不,
我想用 data-sly-resource包含资源,但前提是它存在,例如 如果资源不存在,脚本执行失败并显示以下错误消息:找不到 servlet 来处理资源/content/blog/stats 。
我正在尝试从 Sightly 列表中的项目总数中减去 2。 ${itemList.size -2 @ context='number'} 结果是: org.
如何在 Sightly 中监听事件?我有一个包装器组件,用于保存有关其子级的信息,我希望能够让子级根据这些更改使用react。想想列组件。 我刚刚开始研究 colctrl.js /libs/wcm/f
我发现自 AEM 6.3 以来,标记本身就支持日期格式,如下所示: ${ 'dd~MMMM-yyyy' @ format=currentPage.jcr:created } (引用:https://g
我正在尝试使用 JAVA USE API 和 Sightly 迭代段落列表(com.day.cq.wcm.foundation.Paragraph)。它能够在后台获取段落。但是它无法读取该内容并将其显
所以看起来 sightly 非常适合获取属性,但我想获取我定义的其他子节点的属性。 这是我的 PictureFill 组件结构的开始: { jcr:primaryType: "nt:unstruc
我在尝试查找从多边形上的给定顶点可见的多边形上的所有顶点时遇到问题。到目前为止,我所写的内容只取得了有限的成功。 我可以生成光线到可见顶点,但前提是我的原点不在顶点上,使用以下方法: private
我有以下 Sightly 表达式: 动态链接模板如下: ${text} 这不起作用,因为 text=${'comp.masthead.navigation.home' @ i18n}
我正在尝试在 AEM 6.1 上执行以下操作: 开发一个简单的表单(3 个输入字段) 处理提交的值, 并使用处理后的值/结果重定向到同一页面 我能够将值提交给 servlet,并处理它们(业务逻辑),
在 JSTL 中,您可以在组件中设置变量,这些变量可用于同一请求中的所有其他组件。在 AEM 中使用 sightly 是否有等效的方法在组件之间传递数据? (我们正在研究的用例是我们希望一个组件知道何
我正在尝试实现递归算法解决汉诺塔 Sightly 中的问题。我知道这种方法可能没有很多明显的 实际应用,我把它当作一个谜。我最终得到了一些东西 像这样: 0}" data-sly-unwrap
我一直在关注文档 here 显然,为了让我的“use”类对我的 Sightly 组件可见,我所需要做的就是在“use”语句中使用完整的类名(即包括包)。 我已按照说明构建并部署了我的包。我编译的类就
我有 2 个 list 。对象 allList 中的 list1 和 pathList ${list1} 在我写"XXXXXXXXX"的地方,我需要放置类似的东西 ${pathL
考虑这个二进制图像: 正常的边缘检测算法(如 Canny )将二值图像作为输入并生成以红色显示的轮廓。我需要另一种算法,将点“P”作为第二条输入数据。 “P”是上图中的黑点。该算法应生成蓝色轮廓。蓝色
我正在尝试通过 Sightly 模板语言的 JavaScript UseAPI 调试存储在 JCR 中并在带有 Rhino 的服务器上运行的 JavaScript。 . 按照 sling.proper
我是 Quicksight 的新手,正在尝试更改克隆视觉对象的数据集。 我在 AWS Quicksight 中创建了一项分析,其中包含来自同一数据源的 6 个不同数据集。见下文: 分析中有两个选项卡(
在 Sightly 模板语言中,对于 Adobe AEM6 (CQ),如何仅当条件为真时才向元素添加属性,而无需复制大量代码/逻辑? 例如 Lots of other
上下文 我正在开发一个使用 Sightly 作为模板语言的 AEM 6 项目。我面临一个用例,其中我想根据 Sling 选择器的存在来显示或隐藏标记的某些部分。 例如,对 /content/my-pr
我是一名优秀的程序员,十分优秀!