小编Roy*_* T.的帖子

球体上的3D坐标到纬度和经度

我有以下信息:

存在一个具有原点(0,0,0)和半径R的球体.在进行射线球体交叉后,我知道球体上的三维空间中的一个点(XYZ)(三维空间中线条穿透的确切位置)球体船体).

对于我的程序,我想计算球体上XYZ点的纬度和经度,但我不能想(或谷歌)一种方法来轻松地做到这一点.

简而言之,我正在尝试编写的函数是:

public static LatLon FromVector3(Vector3 position, float sphereRadius)
{
    return Latitude and Longitude
}
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做这个吗?作为参考,这个Wiki SVG文件可能会有所帮助:

地理坐标

更新:

感谢所有有用的答案,所以最后我使用了这段代码:

 public static LatLon FromVector3(Vector3 position, float sphereRadius)
    {
        float lat = (float)Math.Acos(position.Y / sphereRadius); //theta
        float lon = (float)Math.Atan(position.X / position.Z); //phi
        return new LatLon(lat, lon);
    }
Run Code Online (Sandbox Code Playgroud)

现在我必须考虑哪个答案对我有最大的帮助:P.

math geometry latitude-longitude coordinates

39
推荐指数
3
解决办法
4万
查看次数

Microsoft Media Foundation的状态是什么?

Microsoft Media Foundation(MF)是Windows Vista中DirectShow的继承者.我大多忽略它,但它有一些功能(如WMV AC-1文件的解码)很难在DirectShow中实现.Media Foundation也是一个更现代化的API,因此进行切换似乎合乎逻辑.

但是,在线教学资源和官方文档似乎非常缺乏.只有一本书涉及该主题(由微软出版),它不再适用于正常价格.(人们收取500美元,或者更多的二手版本.)

据我所知,没有其他书籍.虽然微软的其他技术通常由多个出版商在多本书中涵盖.

Media Foundation的官方博客自2011年以来一直没有更新.在活跃的两年中,只写了10篇技术文章,其中5篇涉及错误记录/跟踪而不是实际功能.

StackOverflow标签ms-media-foundation仅用于328个问题,其中142个未得到答复.相比之下,有1641个DirectShow问题,其中只有496个未得到答复.

那么微软媒体基金会发生了什么?这个新的API是否会起飞并取代DirectShow,甚至微软还会抛弃MF,转而回到旧的和生锈的(可靠的?)DirectShow.或者是否有另一个非Microsoft框架已经接管了?

ms-media-foundation

26
推荐指数
2
解决办法
5667
查看次数

在略微格式错误的XML上使用C#的XmlReader

我正在尝试在大量的XML文件上使用C#的XmlReader,它们都被正确格式化,除了一些选择的(不幸的是我无法更改它们,因为它会打破很多其他代码).

这些错误只来自这些侵权XML文件的一个特定部分,可以跳过它们,但我不想停止读取XML文件的其余部分.

坏的部分看起来像这样:

 <InterestingStuff>
  ...
    <ErrorsHere OptionA|Something = "false" OptionB|SomethingElse = "false"/>
    <OtherInterestingStuff>
    ...
    </OtherInterestingStuff>
</InterestingStuff>
Run Code Online (Sandbox Code Playgroud)

所以,如果我可以忽略无效标签,或忽略管道符号,那么我会没事的.

当我看到名称"ErrorsHere"时,尝试使用XmlReader.Skip()不起作用,显然它已经提前读取并抛出异常.

TLDR:我如何跳过这样我可以使用XmlReader读取上面的XML文件?

编辑:

有人建议只更换'|'-symbol,但XmlReader的想法是不加载整个文件但只遍历你想要的部分,因为我直接从文件中读取我无法承受整个文件中的读取,替换"|"的所有实例 然后再次阅读部分:).

.net c# xml malformed xmlexception

9
推荐指数
1
解决办法
3370
查看次数

C#将Generic <B>转换为Generic <A>,其中B:A

我有两个课程,MyClassA和MyClassB.MyClassB继承自MyClassA.我写了一个带有以下签名的方法

public void DoSomething(MyGeneric<MyClassA> obj);
Run Code Online (Sandbox Code Playgroud)

我还有以下事件处理程序.

public void MyEventHandler(Object source, EventArgs e)
{
   //source is of type MyGeneric<MyClassB>
   DoSomething((MyGeneric<MyClassA>)obj);
}
Run Code Online (Sandbox Code Playgroud)

我知道它MyGeneric<MyClassA>不是同一类型,MyGeneric<MyClassB>但由于MyClassB是MyClassA的子类,还有一种方法可以使它工作吗?

供参考,确切的错误信息:

无法转换类型为'MSUA.GraphViewer.GraphControls.TreeNode 1[MSUA.GraphViewer.GraphControls.MaterialConfigControl]' to type 'MSUA.GraphViewer.GraphControls.TreeNode1 [MSUA.GraphViewer.PopulatableControl]'的对象.

c# generics type-conversion

8
推荐指数
2
解决办法
674
查看次数

检查计算机从休眠状态恢复的原因

我正在创建一个应用程序,使计算机处于休眠状态几个小时甚至整整一周(使用WaitableTimer和WaitForSingleObject).

计算机可以唤醒的原因有三个

  1. 等待计时器已过期,计算机按计划恢复.
  2. 用户按下恢复计算机的电源按钮.
  3. 电脑意外打开.

前两个原因是完全可以接受的,它们是系统的设计目标.第三个原因当然不是那么好.

我希望能够区分开启这三个原因.有没有办法做到这一点?在这看来,在第一种情况下,该WaitForSingleObject方法应该返回WAIT_OBJECT_0 (源).如果不是这种情况,那么它是情景2或3,但我不确定如何区分这两者.是否有API来检查从待机状态恢复的原因?

另一个(更好的)选择是禁止其他设备/软件唤醒计算机(例如,消除方案3).我不允许在运行powercfg -devicequery -wake_armed时看到的所有设备的唤醒功能(当我运行命令时它现在返回NONE).有没有类似的方法来查看已安排计算机唤醒的所有(活动)软件?

(如果对该软件设计的计算机有任何帮助,那么表面3 pro,安装了包含(和更新)的Windows 8.1操作系统)

c# windows windows-8.1

7
推荐指数
1
解决办法
1040
查看次数

显示窗口后15分钟崩溃

我有一个应用程序(基于XNA项目模板),在开始时显示一个窗口,以便用户可以更改一些设置.之后,Window关闭,程序在XNA管理的另一个窗口中继续.差不多正好在15分钟之后,程序在一个名为Win32的线程中崩溃,该线程不是主线程(但我从未产生过),并且存在访问冲突.

使用标准调试器甚至没有堆栈跟踪.使用本机调试器,它仅显示发生访问冲突,Kernel32!BaseThreadInitThunk其中是未记录的方法.与此同时,主线程似乎仍然乐于执行主游戏循环.

请记住,该应用程序是一个纯粹的C#应用​​程序,所以这真令我困惑.

经过一些测试后,我发现如果我显示一个空窗口,甚至会发生这种情况:

Window window = new Window();
window.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

因此,在我的代码中删除上面的两行使程序完全稳定.添加它们可确保在15分钟(+ - 30秒)后发生访问冲突.

我已经检查过产生窗口的主线程是一个STA线程.我也尝试手动启动调度程序,但这似乎没有帮助(调度似乎已经在运行),我甚至试图在我显示窗口后关闭调度程序,也没有效果.

我还尝试使用在答案中描述的多线程中显示窗口的技术来显示窗口.但这也没有效果.我甚至尝试启动一个完全独立的线程来显示窗口(使用相同的技术).这也没有效果.

这两行代码怎么能让我的程序在15分钟后崩溃?可能需要对空的标准窗户进行什么样的清理?

c# windows wpf xna

7
推荐指数
1
解决办法
172
查看次数

球体方向决定的最短路径

我正在尝试编写一个执行以下操作的算法.

给定当前位置(在方位角和倾角中)和目标位置(再次在A,I中)我应该沿着什么方向行进以通过最短路径行进.返回值可能类似于向量A = -1,I = +0.5,然后我可以根据步长/时间进行缩放.

通过使用大圆可以找到最短路径,这很容易可视化,但是由于我的坐标系不连续,所以很难像上面那样实现.

我的坐标系如下(想象一下站在球体前面)

沿赤道沿前侧行进时方位角为0~pi,沿赤道沿后侧行驶时方位角为0~-pi.

当从球体的顶部到底部行进时,倾斜度为0~ + pi.

因此,给定这个非连续坐标系,如何创建一个决策函数,说"增加A"以在最短路径上行进?

math trigonometry

6
推荐指数
1
解决办法
622
查看次数

为什么部分方法支持ref但不支持out参数

我正在阅读部分方法,因为它们将在C#-6/Visual Studio 2013更新2中与Windows Universal Projects结合使用变得更加重要.在阅读文档时,我读到了部分方法签名的奇怪限制:

部分方法可以有ref但不能输出参数.

我不明白这种限制的原因.由于部分方法基本上是在不同文件中签名和实现的常规方法,因此有哪些技术原因不支持参数?或者此限制的任何其他原因.特别是因为它们确实支持非常相似的 ref参数.

c# partial-methods

6
推荐指数
1
解决办法
348
查看次数

使用 CQRS/事件源时,事件是否应该按顺序存储,以及如何存储

最近我关注了一个 CQRS 研讨会,这让我想知道在使用事件溯源时事件是如何存储的。

我认为在每个事件之后,整个应用程序都应该处于有效状态(否则重放功能将毫无用处)。这意味着事件应该完全按照它们发生的顺序存储。我也相信所有聚合的事件顺序很重要。例如,用户可以制作产品和订单(产品和订单都是单独的聚合,订单通过 ID 引用产品)。这意味着“创建产品事件”应该在“将产品添加到事件”之前存储。否则,重放可能会导致无效状态,其中引用产品的订单存在于产品存在之前。

这种情况如何处理?您是否应该始终使用同步方法将事件发送到数据库,例如通过锁定数据库?该解决方案是否可扩展?还是应该将每个聚合的事件存储在不同的表中?但是,您如何确保订购呢?另一种选择是存储每个事件的时间,并以此排序。PC 上计时器的精度是否足以做到这一点?

c# domain-driven-design cqrs event-sourcing

6
推荐指数
1
解决办法
3512
查看次数

从相同的源代码生成的两个DLL文件中的这些差异是什么

我的所有代码都在源代码管理下,所以我100%确定源代码没有改变.但是如果我构建一个C#DLL两次,它们的内容就会略有不同.我可以通过构建,然后再次构建,100%的时间重现问题.

这似乎根本不会对程序产生影响,但是用于从两个MSI文件创建补丁的MSIMSP等工具会因这些微小的更改而被抛弃.制作补丁(对于我的产品)比它们应该大40倍.

我已经反编译了这两个DLL及其汇编信息,类等等......完全相同.文件大小也完全相同,但当然有不同的创建时间.所以我真的无法理解发生了什么变化.

所以我挖了一点.

我已经使用WinDiff查找更改,然后在十六进制编辑器中交叉引用这些更改.WinDiff显示第二个"行"的变化,并在文件的大约80%的行中显示.

在十六进制编辑器中,我看到更改的第一个字节是字节0x088(字节136).这似乎是这条'线'上唯一改变的字节.我找不到第二个更改,因为WinDiff没有告诉我更改的确切字节偏移量.

这是更改的图像,右侧文件是较新文件的内容. 十六进制视图

是否有人熟悉(C#)DLL文件的组成知道更改的字节可能意味着什么?或者更好的是如何确保DLL文件在重建时保持完全相同?

c# msbuild patch hexdump

6
推荐指数
1
解决办法
928
查看次数