sgu 110 Dungeon 三維計算幾何

2021-06-26 09:15:49 字數 1691 閱讀 4108

題意:宇宙探險家們在一次任務中發現了m行星上的乙個巨大的地牢,地牢的乙個大廳中充滿了閃閃發光的小球。探險家們發現光線

在小球表面反射時遵循光的鏡面反射規律(入射角=反射角)。根據古老的傳說,如果將光線以恰當的順序在小球之間反射,那麼通

道一間隱藏著古老的珍貴知識的房間的門就會開啟。放心,你的任務不是去猜這個恰當的順序是什麼。你的任務簡單得多,你被告知

小球的位置和半徑,以及入射光線的光源位置和方向,然後你要找出光線在小球上反射的序列。

思路:設初始點為s,方向向量為dir,那麼如果與圓有交點,必然為交點p可以表示為s+dir*k,其中k>0 。那麼我們可以暴力列舉所

有的圓,如何判斷與該圓相交呢? 假如相交,設起點s到圓心的向量為vec,起點s到交點p的向量為dir*k,那麼兩個向量相減的絕對值

一定為該圓的半徑,於是列出一元二次方程,解出k(k>0)。那麼在所有的解中取最小的k,不妨設為kmin,那麼交點p=dir*kmin+s。

那麼如何求出反射的方向向量呢?設交點p所在的圓為i,從該圓圓心到起點s的向量設為vec1,從該圓圓心到交點p的向量為vec2,

我們對vec1、vec2求點積再除以vec2的長度就可以得到從圓心到起點s投影到vec2上點(該點即為s垂直於向量vec2的垂足)的向

量,不妨設為vec3,那麼vec3+圓心座標就是垂足的座標,設為p1點。那麼可以得到s相對與p1對稱的點,不妨設點為t,那麼反射向

量就是從交點p指向t的向量。那麼迴圈10次。。每次迴圈之後如果找到點就用交點更新起點,用反向向量更新方向向量,找不到就直

// file name: sgu110.cpp //

// author: kereo //

// create time: 2023年10月16日 星期四 19時13分02秒 //

//***********************************//

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=100+100;

const double eps=1e-8;

const int inf=0x3fffffff;

const int mod=1000000000+7;

#define l(x) (x<<1)

#define r(x) (x<<1|1)

int n;

struct point

}p[maxn];

typedef point vec;

vec operator + (vec a,vec b)

vec operator - (vec a,vec b)

vec operator * (vec a,double k)

vec operator / (vec a,double k)

int dcmp(double x)

vec reflect(point s,point p,point cir)

int main()

if(now == -1)

if(i == 10)

else

pre=now;

} }return 0;

}

三維座標 偏轉 天津三維掃瞄

三維掃瞄的概念及儀器種類 三維掃瞄是指集光 機 電和計算機技術於一體的高新技術,主要用於對物體空間外形和結構及色彩進行掃瞄,以獲得物體表面的空間座標。它的重要意義在於能夠將實物的立體資訊轉換為計算機能直接處理的數碼訊號,為實物數位化提供了相當方便快捷的手段。三維掃瞄技術能實現非接觸測量,且具有速度快...

python三維座標 python中三維輪廓的座標

感謝在這個 上獲得的知識。我能寫乙個簡單的指令碼,列印出等高線圖的座標 x和y 在 下面是乙個例子 from numpy import from pylab import generate a set of random points npts 500 phi random npts 2 pi th...

三維座標 偏轉 三維座標下的旋轉

三維座標的旋轉有以下幾種常見的表示形式 旋轉向量,旋轉矩陣,尤拉角,四元數,下面對這四種表示形式及其之間的轉換進行介紹 旋轉向量 通常為3x1的列向量,向量方向即為旋轉軸,向量的模表示繞軸逆時針旋轉的角度,如旋轉向量v a,b,c 那麼旋轉角度theta sqrt a2 b2 c2 旋轉軸z a t...