Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Cyrus_Beck() {
- double t0 = 0;
- double t1 = 1;
- Point D = {points_line[1].x - points_line[0].x, points_line[1].y - points_line[0].y};
- points.push_back(points[0]);
- for (int i = 0; i < points.size() - 1; i++) {
- Point ni = {points[i].y - points[i+1].y, points[i + 1].x - points[i].x};
- Point Wi = {points_line[0].x - points[i].x, points_line[0].y - points[i].y};
- double d = (ni.x * D.x) + (ni.y * D.y);
- double w = (Wi.x * ni.x) + (Wi.y * ni.y);
- if (d == 0) {
- if (w < 0) {
- continue;
- }
- continue;
- }
- double t = -w / d;
- if (d > 0) {
- if (t > 1) {
- continue;
- }
- t0 = max(t, t0);
- continue;
- }
- if (t < 0) {
- continue;
- }
- t1 = min(t, t1);
- }
- points.pop_back();
- //cout << t0 << " " << t1 << endl;
- Point p1 = {points_line[0].x + (points_line[1].x - points_line[0].x) * t0,
- points_line[0].y + (points_line[1].y - points_line[0].y) * t0};
- Point p2 = {points_line[0].x + (points_line[1].x - points_line[0].x) * t1,
- points_line[0].y + (points_line[1].y - points_line[0].y) * t1};
- points_line[0] = p1;
- points_line[1] = p2;
- // cout << p1.x << " " << p1.y << endl;
- //cout << p2.x << " " << p2.y << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement