bool lineIntersection(cv::Point2f &c1, cv::Point2f &c2, cv::Point2f &d1, cv::Point2f &d2, cv::Point2f &intersection) {
	/*

	두 점 A(x1, y1), B(x2, y2)을 잇는 직선의 방정식
	y = ax + b (a : 기울기 = y증가량/x증가량, b : 상수)
	a = (y2-y1)/(x2-x1)
	y = (y2-y1)/(x2-x1)x + b
	b = y - (y2-y1)/(x2-x1)x
	b = y1 - (y2-y1)/(x2-x1)x1

	!!!!! y = (y2-y1)/(x2-x1)x + (y1 - (y2-y1)/(x2-x1)x1) !!!!!

	방정식 1 : y = a1x + b1
	방정식 2 : y = a2x + b2
	(a1-a2)x = (b2-b1)
	x = (b2-b1)/(a1-a2)
	방정식 1에 대입하면
	y = a1((b2-b1)/(a1-a2)) + b1
	 
	교점의 좌표 (x,y) = ( (b2-b1)/(a1-a2), a1((b2-b1)/(a1-a2)) + b1)

	 */

	float a1, b1, a2, b2;
	a1 = (c2.y - c1.y) / (c2.x - c1.x);
	//b1 = c1.y - (((c2.y - c1.y) / (c2.x - c1.x))*c1.x);
	b1 = c1.y - (a1*c1.x);
	//cout << "test:x:" << intersection.x << endl;

	a2 = (d2.y - d1.y) / (d2.x - d1.x);
	//b2 = d1.y - (((d2.y - d1.y) / (d2.x - d1.x))*d1.x);
	b2 = d1.y - (a2*d1.x);

	if (a1 == a2) return false;//평행이나 일치인 경우

	intersection.x = (b2- b1) / (a1 - a2);
	intersection.y = a1*(intersection.x) + b1;
	cout << "test:x:" << intersection.x << endl;
	cout << "test:y:" << intersection.y << endl;
	return true;

};
Posted by 흰털너부리
: