- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些源,其坐标(xn,yn,zn)相对于环的中心C和沿着我的视线的单位 vector (ns_ux,ns_uy,ns_uz)。我想计算这些源是否分别穿过内半径和外半径分别为 9.5 和 10.5 单位的圆柱体。如果它们与这个圆柱体相交(或者我有时称之为环),那么我想计算这个截距的长度。我的位置在这个环的外面,并且有源位于另一边的中心C之外。因此,这些来源将两次穿过这个环。这张图片应该有助于形象化这个问题。
#define PI 3.142
int main(){
int k,number=200;
float r_min=9.50000;
float r_max=10.500000;
float step=0.3;
float z_c = 3.0;
float ns_ux[number],ns_uy[number],ns_uz[number],xn[number], yn[number],zn[number],l[number],b[number],ns[number],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.;
for (u=0.;u<=30.;u=u+step){
x_comp=xn[k]+u*ns_ux[k];
vector 加法:沿着我的 l.o.s 以 'u' 单位步进时,计算相对于中心 C 的 x_comp。
y_comp=yn[k]+u*ns_uy[k];
radial=pow((x_comp*x_comp+y_comp*y_comp),0.5);
if (radial >=r_min && radial <=r_max){
z_comp=zn[k]+u*ns_uz[k];
检查高度是否与戒指的高度一致
if(z_comp >=-z_c && z_comp <= z_c)
printf("%f\t%f\t%f\t%f\n",l[k],u, z_comp, radial);
}
}
}
return 0.;
}
这个“径向”值给了我一个视线与环相交点的列表。但是,我只需要端点来计算环上截距的长度。例如在下面列出的情况下,我的损失在 I 处穿过环,然后在 II 处离开。然后它继续前进,直到在 III 处再次撞击环,然后在 IV 处离开环。我只需要在我的文件中存储 I、II、III 和 IV 点。我怎样才能做到呢?
经度......u......z_comp......径向
121.890999 0.100000 0.016025 9.561846 I
121.890999 0.200000 0.038453 9.538050
121.890999 0.300000 0.060881 9.515191 II
121.890999 4.799998 1.070159 9.518372 III
121.890999 4.899998 1.092587 9.541364
121.890999 4.999998 1.115016 9.565292
......跳过以节省空间......
121.890999 7.399995 1.653297 10.400277
121.890999 7.499995 1.675725 10.444989
121.890999 7.599995 1.698153 10.490416 IV
最佳答案
找到了一种使用 bool 运算符仅存储最终值和初始值的方法,如下所示(继续问题中的代码):
define bool change = true;
...(rest of the program)...
if(radial >= r_min && radial <= r_max) {
z_comp = zn[k] + u * ns_uz[k];
if (z_comp >= -z_c && z_comp <= z_c)
if (change) {
printf("%f\t%f\t%f\t%f\t", l[k], b[k], ns[k], radial[i]);
change = !change;
}
} else { // if the condition of radial and z_comp is not met
if (!change) {
fprintf(fp, "%f\n", radial[i - 1]);
change = !change;
}
}
这将仅存储径向分量的第一个和最后一个值(即环上视线 vector 截距的端点)
关于c - 直线与圆柱(环)相交的截距长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598193/
我是一名优秀的程序员,十分优秀!