2021. 1. 18. 16:35
Unity/C#
Xⁿ=Y 일때
n을 구하려면 log(Y) / log(X) //로그
X를 구할려면 Sqrt(Y,n) //루트,제곱근, 여러개이면 거듭제곱근
Y를 구할려면 Pow(X,n) 혹은 Sqr(X,n) //제곱,여러개이면 거듭제곱
이상한 방법들
X를 구할때 보통을 sqrt를 써야하지만 인자를 1개만 받는 함수밖에 없을경우에
Pow(Y,1/n) //혹은 Sqr
이렇게 Pow를 써서 sqrt를 구할수도 있다
즉 Sqrt(x) = pow(x,1/2) 이다
Sqr계열
32의 5제곱근을 구할때
Sqr(32,1/5) //1은 고정숫자임
계산기 버전
log계열
//1024가 2의 몇승인지 구한다
Mathf.Log(1024,2)
다른버전
Mathf.Log(1024)/Mathf.Log(2)
계산기 버전
쓸모는 없지만
log(32)/5 = log(2)
이다
참고로 32는 2의 5제곱이다 즉
x^y=z일때
log(z)/y = log(x)
//npot를 최적의 2pot사이즈로 변경
wid=Mathf.Pow(2, Mathf.Round(Mathf.Log(texture.width, 2))));
hei=Mathf.Pow(2, Mathf.Round(Mathf.Log(texture.height, 2))));
/*
결과:
256->256
230->256
140->128
1031->1024
*/
원점에서의 거리
var len = sqrt(x*x + y*y);
x1,y1에서 x2,y2까지의 거리
Len과 dir을 이용하여 좌표를 구함
public double d_set(double _Dir)
{
if(_Dir<0d)
{
_Dir=360d-((-_Dir)%360d);
}
if(_Dir>=360d)
{
return _Dir%360d;
}
return _Dir;
}
public double len_x(double _Len,double _Dir)
{
_Dir = d_set(_Dir);
return _Len*Math.Cos(_Dir*Math.PI/180.0);
}
public double len_y(double _Len,double _Dir)
{
_Dir = d_set (_Dir);
return _Len*Math.Sin(_Dir*Math.PI/180.0);
}
pdir
x1,x2,y1,y2를 이용하여 각도를 구함
float2 center = 0.5;
float2 pos = i.uv.xy-center;
float2 dir = ((atan2(pos.x,-pos.y)*2/3.14)/4+0.75)%1;
p1,p2,r,center를 이용하여 p3를 구하는 공식
챗GPT가 짜줬다
float2 FindIntersection(float2 p1, float2 p2, float R, float2 center)
{
float2 dir = normalize(p2 - p1);
float2 diff = p1 - center;
// 원의 중심에서 선까지의 거리 d 계산
float d = abs(diff.x * dir.y - diff.y * dir.x);
// 만약 d가 R보다 크면 교점이 없음
if (d >= R)
return float2(0, 0);
// L 계산: L = sqrt(R^2 - d^2)
float L = sqrt(R * R - d * d);
// 원의 중심에서 교점까지의 거리 h 계산: h = sqrt(R^2 - L^2)
float h = sqrt(R * R - L * L);
float2 midpoint = p1 + dot(center - p1, dir) * dir; // 선 위의 원의 중심에 수직인 점
// 두 교점은 midpoint에서 ±L만큼 dir 방향으로 떨어져 있음
float2 intersection1 = midpoint + L * dir;
float2 intersection2 = midpoint - L * dir;
// 이 예제에서는 두 교점 중 하나만 반환합니다.
// 필요에 따라 두 교점 중 원하는 교점을 선택하여 반환하면 됩니다.
return intersection1;
}