]> git.sesse.net Git - casparcg/blob - modules/image/util/image_algorithms.cpp
Support for ternary operator equivalent for bindings
[casparcg] / modules / image / util / image_algorithms.cpp
1 /*
2 * Copyright 2013 Sveriges Television AB http://casparcg.com/
3 *
4 * This file is part of CasparCG (www.casparcg.com).
5 *
6 * CasparCG is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * CasparCG is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * Author: Helge Norberg, helge.norberg@svt.se.com
20 */
21
22 #include "image_algorithms.h"
23
24 #include <vector>
25 #include <cstdint>
26
27 namespace caspar { namespace image {
28
29 std::vector<std::pair<int, int>> get_line_points(int num_pixels, double angle_radians)
30 {
31         std::vector<std::pair<int, int>> line_points;
32         line_points.reserve(num_pixels);
33
34         double delta_x = std::cos(angle_radians);
35         double delta_y = -std::sin(angle_radians); // In memory is revered
36         double max_delta = std::max(std::abs(delta_x), std::abs(delta_y));
37         double amplification = 1.0 / max_delta;
38         delta_x *= amplification;
39         delta_y *= amplification;
40
41         for (int i = 1; i <= num_pixels; ++i)
42                 line_points.push_back(std::make_pair(
43                         static_cast<int>(std::floor(delta_x * static_cast<double>(i) + 0.5)), 
44                         static_cast<int>(std::floor(delta_y * static_cast<double>(i) + 0.5))));
45
46         return std::move(line_points);
47 }
48
49 }}      //namespace caspar::image