标签: projection

如何应用转换矩阵?

我正在尝试获取3D空间中某个点的2D屏幕坐标,即我知道相机的平移,倾斜和滚动的位置,并且我有一个我希望投影的点的3D x,y,z坐标.

我很难理解转换/投影矩阵,我希望这里的一些聪明人可以帮助我;)

这是我到目前为止抛出的测试代码:

public class TransformTest {

public static void main(String[] args) {

    // set up a world point (Point to Project)
    double[] wp = {100, 100, 1};
    // set up the projection centre (Camera Location)
    double[] pc = {90, 90, 1};

    double roll = 0;
    double tilt = 0;
    double pan = 0;

    // translate the point
    vSub(wp, pc, wp);

    // create roll matrix
    double[][] rollMat = {
            {1, 0, 0},
            {0, Math.cos(roll), -Math.sin(roll)},
            {0, Math.sin(roll), Math.cos(roll)},
    }; …
Run Code Online (Sandbox Code Playgroud)

3d projection

12
推荐指数
2
解决办法
2万
查看次数

where子句中的SQL DateDifference

我正在进行如下查询:

SELECT
  *
FROM a
WHERE DATEDIFF(D, a.DateValue, DateTimeNow) < 3;
Run Code Online (Sandbox Code Playgroud)

并没有工作

我试图获取不超过3天的数据.

SQL服务器.

这该怎么做?

DATEDIFF工作太慢..

sql sql-server datetime projection

12
推荐指数
1
解决办法
3万
查看次数

如何使用某些LatLng在Google地图上放置标记,而不是绘制多边形?

大约一个星期前,我遇到了一个问题:在自定义谷歌驱动的地图上,我的多边形不会显示,而相同坐标的标记完全没问题.尽管我使用Google Maps API,但似乎无法找到原因.

这是指向地图截图的链接.紫色箭头和数字是我的补充,他们表示:

  1. google.maps.Marker我可以把我的"区域"的边缘.
  2. google.maps.Polygon代码生成的工件.它是预期的红色,但完全不合适并且奇怪地平坦.

以下是生成标记和多边形的代码部分:

var regionData = tecMap.regions[r];
var regionMapMarkers = new google.maps.MVCArray();

for (c in regionData.coords) {
    var point = projection.worldToMap(regionData.coords[c]);
    debugRegionPoints.push(point);
    var thisLatLng = projection.fromPointToLatLng(point);
    debugRegionLatLngs.push(thisLatLng);
    regionMapMarkers.push(thisLatLng);
}

regionMapMarkers.forEach(function(latLng, m){
    var marker = new google.maps.Marker({       
        position: latLng,
        map: map, 
        title: '',
        optimized: false
    });
    regionCorners.push(marker);
});

var paths = new google.maps.MVCArray();
paths.push(regionMapMarkers);

var region = new google.maps.Polygon({
    fillColor: "#FF0000",
    fillOpacity: 0.35,
    map: map,
    paths: paths,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2 …
Run Code Online (Sandbox Code Playgroud)

javascript google-maps polygon projection google-maps-api-3

12
推荐指数
1
解决办法
1693
查看次数

来自视野的Kinect内在参数

微软声称Kinect的视角为垂直43度,水平57度(此处说明).鉴于这些,我们可以计算内在参数,即焦点和投影中心吗?我假设投影中心可以给出(0,0,0)?

谢谢

编辑:有关我正在尝试做什么的更多信息

我有一个用Kinect记录的图像数据集,我试图将像素位置(x_screen,y_screen和z_world(mm))转换为真实世界坐标.

如果我知道相机放置在真实世界坐标系中的点(x',y',z'),通过执​​行以下操作就足以找到真实世界的坐标:

x_world = (x_screen - c_x) * z_world / f_x
y_world = (y_screen - c_y) * z_world / f_y
Run Code Online (Sandbox Code Playgroud)

其中c_x = x'c_y = y'f_x, f_y是焦距?而且,只要了解视野,我怎样才能找到焦距?

谢谢

math geometry projection camera-calibration kinect

12
推荐指数
1
解决办法
2万
查看次数

3D光线拾取在鼠标未锁定时使用鼠标坐标

所以基本上我已经使用OpenGL创建了一个可以执行3D Ray Picking的程序.如果Camera View Direction Ray触摸/交叉任何东西(不是空气),那么将在交叉点/点处渲染一个小的紫色框.

如果光线与任何"红色框"相交,那么与光线相交的光线将变为绿色.地面和墙壁根本不会改变颜色或纹理.

例子:

我目前进行3D射线拾取的方法是获取相机的视线方向光线,然后只计算交叉点.我计算交叉点的函数不作为布尔值返回,它作为3D矢量返回(交集本身的坐标)

问题

所以我想要实现的是计算拾取雷,但是当它没有锁定到屏幕时根据鼠标.

示例 - 所以在这里你可以看到紫色的盒子在十字准线上,但是如果我要解锁鼠标并移动它(在屏幕顶部,正常情况下)并将其移动到绿色X标记的中心我'我画了,然后我想计算从摄像机中心到屏幕顶部鼠标坐标的光线.

目前的测试和想法

这应该只是一个数学问题.这里只是我目前用来计算雷的一些简短列表(并试图计算第二条射线)

  • Cameara X,Y,Z
  • 相机间距偏转辊(现在不使用辊)
  • 相机近远(距离)
  • 相机Fov
  • 相机方面
  • 鼠标X,Y(在屏幕顶部)
  • Sceen Width,Height

鼠标X和Y原点(0x0)位于窗口/框架的左下角.

计算主要的拾取射线本身

Vector3D position = new Vector3D(
        camera.x,
        camera.y,
        camera.z);

Vector3D direction = new Vector3D(
        Math.cos(Math.toRadians(camera.pitch)) * -Math.sin(Math.toRadians(-camera.yaw)) * camera.far,
        Math.cos(Math.toRadians(camera.pitch)) * cameara.far,
        Math.cos(Math.toRadians(camera.pitch)) * -Math.sin(Math.toRadians(-camera.yaw)) * camera.far);

direction.normalize();

Ray3D ray = new Ray(position, direction);
Run Code Online (Sandbox Code Playgroud)

这就是我计算主要拾取光线本身的方式(锁定鼠标的拾取光线).我做出了自己的类,但他们应该感(Vector3D,Ray3D,等)和normalize()方法不正是它说,标准化的载体.

理念

因此,当我尝试使用鼠标坐标进行计算时,我在调用之前插入了以下代码direction.normalize();,因此在创建之后 …

opengl 3d vector projection ray-picking

12
推荐指数
1
解决办法
1万
查看次数

如何正确使用 EF Core 和 AutoMapper ProjectTo 和 Unions?

我的设置

  • ASP.NET 核心 2.0
  • 实体框架核心 2.0.1
  • 自动映射器 6.2.2

问题

我有一个名为 DTO 的项目PersonDetail和一个名为Person. 当我打电话

db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ProjectTo<PersonDetail>(mapperConfig).ToList(); 
Run Code Online (Sandbox Code Playgroud)

我没有得到PersonDetailDTO 和实体框架(核心)抛出异常的消息:

ArgumentException:输入序列必须具有“Test.Module.Entities.Person”类型的项目,但它具有“Test.Module.Dtos.PersonDetail”类型的项目。


没有问题的例子

当我运行代码时:

 db.People.Where(p => p.FirstName == "Joe").Union(db.People.Where(p => Age > 30)).ToList(); 
Run Code Online (Sandbox Code Playgroud)

Person毫无例外地得到了实体。


执行计划

这是一个工作计划(有工会):

{value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]).Where(entity => ((entity != null) And ((63ed0ebd-2c02-4496-ac8d-b836cbf13259 = = entity.CreatedBy) 或 (393a6bb0-b437-4664-beb0-6800f509451b == entity.CreatedBy)))).Union(value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person] ))}

现在这是相同的计划,但也有自动映射器投影:

{value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person]).Where(entity => ((entity != null) And ((63ed0ebd-2c02-4496-ac8d-b836cbf13259 = = entity.CreatedBy) 或 (393a6bb0-b437-4664-beb0-6800f509451b == entity.CreatedBy)))).Union(value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[Test.Module.Entities.Person] )).Select(dto => new …

union projection automapper asp.net-core-2.0 ef-core-2.0

12
推荐指数
1
解决办法
1万
查看次数

为什么接口预测比使用Hibernate的Spring Data JPA中的构造函数预测和实体预测慢得多?

我一直在想我应该使用哪种投影,所以我做了一点测试,其中包括5种类型的投影(基于文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#project):

1.实体投射

这只是findAll()Spring Data存储库提供的标准.没什么好看的.

服务:

List<SampleEntity> projections = sampleRepository.findAll();
Run Code Online (Sandbox Code Playgroud)

实体:

@Entity
@Table(name = "SAMPLE_ENTITIES")
public class SampleEntity {
    @Id
    private Long id;
    private String name;
    private String city;
    private Integer age;
}
Run Code Online (Sandbox Code Playgroud)

2.构造函数投影

服务:

List<NameOnlyDTO> projections = sampleRepository.findAllNameOnlyConstructorProjection();
Run Code Online (Sandbox Code Playgroud)

库:

@Query("select new path.to.dto.NameOnlyDTO(e.name) from SampleEntity e")
List<NameOnlyDTO> findAllNameOnlyConstructorProjection();
Run Code Online (Sandbox Code Playgroud)

数据传输对象:

@NoArgsConstructor
@AllArgsConstructor
public class NameOnlyDTO {
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

3.界面投影

服务:

List<NameOnly> projections = sampleRepository.findAllNameOnlyBy();
Run Code Online (Sandbox Code Playgroud)

库:

List<NameOnly> findAllNameOnlyBy();
Run Code Online (Sandbox Code Playgroud)

接口:

public interface NameOnly {
    String getName(); …
Run Code Online (Sandbox Code Playgroud)

performance spring hibernate projection spring-data-jpa

12
推荐指数
1
解决办法
1374
查看次数

Spring Jpa Projection接口发生Boolean类型错误

问:为什么 JPA Projection 无法转换Mysql bit(1)Java Boolean

Projection type must be an interface!当Mysqlbit(1)类型映射到Java类型时, Spring Jpa Projection出现错误Boolean

Jpa 将实体类中的布尔列转换为 Mysql 表中的位(1)列。

如果我将getIsBasicPlanInfoProjection 接口中的类型更改IntegerBoolean,则不起作用。为什么会出现错误呢?

JPA 存储库

@Query(nativeQuery=true, value="select true as isBasic from dual")
ProductOrderDto.PlanInfoProjection findPlanInfoById(Long id);
Run Code Online (Sandbox Code Playgroud)

投影接口

public class ProductOrderDto {

    @Getter
    public static class PlanInfo {
        private Boolean isBasic;

        public PlanInfo(PlanInfoProjection projection) {
            // this.isBasic = projection.getIsBasic(); //<-- I want to use like this.
            if (projection.getIsBasic() == …
Run Code Online (Sandbox Code Playgroud)

mysql spring boolean projection spring-data-jpa

12
推荐指数
1
解决办法
3622
查看次数

CQRS事件存储聚合与投影

在CQRS事件存储中,"聚合"是否包含事件的汇总视图或仅仅是对这些事件边界的引用?(组ID)

投影是事件的视图或表示,因此在聚合表示对我有意义的边界的情况下,而如果聚合包含当前的汇总状态,我会对两者之间的重复感到困惑.

aggregate projection cqrs event-sourcing event-store

11
推荐指数
1
解决办法
5142
查看次数

如何将球面坐标转换为equirectangular投影坐标?

简化的问题

如何将球面坐标(θ,φ)转换为等距矩形投影(也称为"地理投影")的位置(x,y )?

其中:

  • x是经度,水平位置,从-180到180度.
  • y是纬度,垂直位置,从-90到90度.
  • θ是θ,以度为单位的水平角度,从(0,0,0)到球体表面上的点的矢量.
  • φ是phi,垂直角度,从(0,0,0)到球面上的点的矢量.

下面你会找到原来的问题,当我不能很好地理解这个问题时,我认为它仍然有助于展示这个解决方案的实际应用.

上下文

编辑:原始问题标题是:如何以给定角度转换照片成为全景照片的一部分?

如果我想以任何给定角度拍摄照片,以便我可以将得到的(扭曲/变形的)图像放置在等距矩形投影,立方体贴图上的相应特定位置,任何人都可以帮助我采取哪些步骤或任何全景照片投影?

无论哪种投影最容易做到都足够好,因为有很多资源可用于如何在不同的投影之间进行转换.我只是不知道如何从实际照片到这样的投影.

可以安全地假设摄像机将停留在固定位置,并可以从那里向任何方向旋转.我认为需要这样做的数据可能是这样的:

  • 物理相机的水平角度[-180, +180](例如+ 140deg).
  • 物理相机的垂直角度[-90, +90](例如-30度).
  • 照片分辨率w x h(例如1280x720像素).
  • 照片的水平角度(例如70度).
  • 照片的垂直角度(例如40度).
  • 镜头校正a,b,c参数(见下文).

我有这些数据,我想第一步是进行镜头校正,以便所有应该笔直的线条实际上是直的.而这是可以做到用imagemagick桶形畸变的 A,B和C:,在其中您只需要填写三个参数.应用于图像以纠正此问题的转换非常简单.

我坚持下一步.要么我不完全理解它,要么搜索引擎没有帮助我,因为大多数结果都是关于在已经给定的投影之间进行转换,或者使用高级应用程序将照片智能地拼接在一起.这些结果并没有帮助我回答我的问题.

编辑:我想,也许一个数字将有助于更好地解释:)

问题是给定的照片红色不能在没有变换的情况下放入等角矩形投影中.下图说明了这个问题.

带有

所以,我有红色,我需要把它变成绿色.蓝色显示转换的差异,但这取决于水平/垂直角度.

camera projection image-processing coordinates coordinate-systems

11
推荐指数
1
解决办法
8301
查看次数