Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查线段是否在摄影机视野中_Python_C++_Algorithm - Fatal编程技术网

Python 检查线段是否在摄影机视野中

Python 检查线段是否在摄影机视野中,python,c++,algorithm,Python,C++,Algorithm,输入数据: 字段大小H从10^3到10^6 线段数N从1到100 摄像机角度α,弧度为-0.01到0.05 摄像机方向的起始角D(0/90/180/270度) 摄像机的坐标Xs,Ys 从-2pi到2pi的角度β,相机应在该角度旋转 场上所有线段的位置及其颜色 程序应按顺序显示摄像机看到的所有颜色。 为方便起见,数据可以通过以下方式可视化: import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() fi

输入数据:

字段大小
H
从10^3到10^6

线段数
N
从1到100

摄像机角度
α
,弧度为-0.01到0.05

摄像机方向的起始角
D
(0/90/180/270度)

摄像机的坐标
Xs,Ys

从-2pi到2pi的角度
β
,相机应在该角度旋转

场上所有线段的位置及其颜色

程序应按顺序显示摄像机看到的所有颜色。

为方便起见,数据可以通过以下方式可视化:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
fig.set_figwidth(10)  
fig.set_figheight(10)

ax = fig.gca()
ax.set_xticks(np.arange(0, H+250, 250))
ax.set_yticks(np.arange(0, H+250, 250))

plt.plot([0,H], [0,0], 'k')
plt.plot([0,0], [0,H], 'k')
plt.plot([0,H], [H,H], 'k')
plt.plot([H,H], [0,H], 'k')



for line in lines:  
    plt.plot([line[0],line[2]], [line[1],line[3]], '#'+line[4], linewidth=5)

ax.add_artist(plt.Circle((Xs, Ys), 100, color='r'))

plt.grid()
plt.show()
例如:

Input:
2000 5 0.01 (H, N, α)
0 875 625 1.22 (D, Xs, Ys, β)
1000 750 1000 1000 0000FF (X1,Y1,X2,Y2, Color)
750 1250 1250 1250 FFFF00 (X1,Y1,X2,Y2, Color)
1250 1000 1500 1000 FF0000 (X1,Y1,X2,Y2, Color)
1500 750 1250 750 00FF00 (X1,Y1,X2,Y2, Color)
1750 250 1750 750 0000FF (X1,Y1,X2,Y2, Color)

Output:
0000FF 00FF00 FF0000 0000FF
还有一个例子:

Input:
4000 12 0.01
270 1625 1125 6.28
1000 1750 1500 1750 00FF00
2250 1750 2000 1750 00FF00
1750 500 2250 500 00FF00
2250 1500 2250 2000 0000FF
1250 1500 1250 1250 0000FF
2750 2250 2750 2500 FFFF00
2750 1750 2750 750 FFFF00
2500 500 2500 1000 FF0000
2500 1750 2750 1750 FF0000
1000 750 1500 750 FF0000
750 1000 750 1500 FF0000
1000 750 1000 1250 FF0000

Output:
00FF00 FF0000 FFFF00 FF0000 0000FF 00FF00 0000FF FF0000

我试了两种方法。在中,我忽略了摄影机的视角,并在所有角度上迭代,检查与所有直线的交点。在中,我比较了所有点相对于地平线的角度

但是第一种方法和第二种方法都不能正常工作


请告诉我,我可以用什么算法来解决这个问题

你能再解释一下输入参数吗?改变H有什么影响?它是否代表摄像机周围的一个半径,就像地平线一样,超出这个半径什么也看不见?β是什么意思?该参数是否意味着相机并非真正连续旋转,而是以瞬间“跳跃”旋转,可能跳过部分场景(当β>α时)?两个线段之间的交点是否可以不作为任何一个线段的终点,从而使它们真正相互交叉?H-一个自然数,可被250整除,无余数。这个正方形区域的边界是白色的。但这并不影响任务,因为只需要打印段的颜色作为响应。β是相机应该旋转的角度。如果角度为正,则相机逆时针旋转;如果β小于零,则相机顺时针旋转。照相机转动平稳。颜色段不相交。下面是第一个示例的说明。段上的数字显示其打印顺序。好的,H的值可以忽略,只有β的符号是相关的,对吗?是的,不要忘记角度α也很重要,这是相机本身的视角。你能解释一下输入参数吗?改变H有什么影响?它是否代表摄像机周围的一个半径,就像地平线一样,超出这个半径什么也看不见?β是什么意思?该参数是否意味着相机并非真正连续旋转,而是以瞬间“跳跃”旋转,可能跳过部分场景(当β>α时)?两个线段之间的交点是否可以不作为任何一个线段的终点,从而使它们真正相互交叉?H-一个自然数,可被250整除,无余数。这个正方形区域的边界是白色的。但这并不影响任务,因为只需要打印段的颜色作为响应。β是相机应该旋转的角度。如果角度为正,则相机逆时针旋转;如果β小于零,则相机顺时针旋转。照相机转动平稳。颜色段不相交。下面是第一个示例的说明。段上的数字显示其打印顺序。好的,所以H的值可以忽略,只有β的符号是相关的,对吗?是的,不要忘记角度α也很重要,这是相机本身的视角。