https://github.com/hasenpfote/plucker
Class template for Plucker coordinates of a line.
https://github.com/hasenpfote/plucker
class-template cpp11 eigen header-only plucker-coordinates
Last synced: 8 months ago
JSON representation
Class template for Plucker coordinates of a line.
- Host: GitHub
- URL: https://github.com/hasenpfote/plucker
- Owner: Hasenpfote
- License: cc0-1.0
- Created: 2021-02-17T05:25:23.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-02-24T13:05:56.000Z (over 5 years ago)
- Last Synced: 2025-07-06T19:15:22.107Z (11 months ago)
- Topics: class-template, cpp11, eigen, header-only, plucker-coordinates
- Language: C++
- Homepage:
- Size: 71.3 KB
- Stars: 1
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.com/Hasenpfote/plucker)
# plucker
---------------------
## About
- Class template for Plücker coordinates of a line.
- Header-only.
## Compatibility
Supports C++ 11 or higher.
| Compiler | Version | Remarks |
| -------- | ----------------- | ------- |
| gcc | 5.5.0 or higher. | |
| clang | 7.0.0 or higher. | |
| msvc | 16.5.4 or higher. | |
**Older versions of compilers might work as well but they are not tested.**
## Dependencies
- [Eigen](http://eigen.tuxfamily.org)
## usage
```c++
#include
using value_type = double;
using Vector3 = plucker::Vector3;
using Vector4 = plucker::Vector4;
using Plucker = plucker::Plucker;
bool has_intersection(
const Plucker& ray,
const Vector4& p1,
const Vector4& p2,
const Vector4& p3)
{
if(ray * Plucker(p1, p2) > 0.0)
return false;
if(ray * Plucker(p2, p3) > 0.0)
return false;
if(ray * Plucker(p3, p1) > 0.0)
return false;
return true;
}
int main()
{
// Plucker coordinates of a ray.
const auto from = Vector4(0.0, 1.0, 6.0, 1.0);
const auto to = Vector4(0.0, 1.0, 4.0, 1.0);
const auto ray = Plucker(from, to);
// Points of a triangle.
// Here, the front facing of a triangle is counterclockwise.
const auto p1 = Vector4(3.0, 0.0, -2.0, 1.0);
const auto p2 = Vector4(0.0, 3.0, -2.0, 1.0);
const auto p3 = Vector4(-3.0, 0.0, -2.0, 1.0);
// Does a ray have an intersection with a triangle?
const auto res = has_intersection(ray, p1, p2, p3);
std::cout << "has_intersection: " << res << std::endl; // true
return 0;
}
```
## References
- [Eigen](http://eigen.tuxfamily.org)
## License
This software is released under the CC0 License, see LICENSE.