我试图在单位球体的表面上生成均匀的随机点,用于蒙特卡罗射线追踪程序.当我说均匀时,我的意思是这些点相对于表面积均匀分布.我目前的方法是计算指向正z轴并基于xy平面的半球上的均匀随机点.
半球上的随机点表示漫射灰色发射器的热辐射发射方向.
当我使用以下计算时,我获得了正确的结果:
注意:dsfmt*将返回0到1之间的随机数.
azimuthal = 2*PI*dsfmt_genrand_close_open(&dsfmtt);
zenith = asin(sqrt(dsfmt_genrand_close_open(&dsfmtt)));
// Calculate the cartesian point
osRay.c._x = sin(zenith)*cos(azimuthal);
osRay.c._y = sin(zenith)*sin(azimuthal);
osRay.c._z = cos(zenith);
Run Code Online (Sandbox Code Playgroud)
然而,这是非常缓慢的,并且分析表明它占用了大部分的运行时间.因此,我找到了一些替代方法:
Marsaglia 1972年的拒绝方法
do {
x1 = 2.0*dsfmt_genrand_open_open(&dsfmtt)-1.0;
x2 = 2.0*dsfmt_genrand_open_open(&dsfmtt)-1.0;
S = x1*x1 + x2*x2;
} while(S > 1.0f);
osRay.c._x = 2.0*x1*sqrt(1.0-S);
osRay.c._y = 2.0*x2*sqrt(1.0-S);
osRay.c._z = abs(1.0-2.0*S);
Run Code Online (Sandbox Code Playgroud)
分析笛卡尔坐标计算
azimuthal = 2*PI*dsfmt_genrand_close_open(&dsfmtt);
u = 2*dsfmt_genrand_close_open(&dsfmtt) -1;
w = sqrt(1-u*u);
osRay.c._x = w*cos(azimuthal);
osRay.c._y = w*sin(azimuthal);
osRay.c._z = abs(u);
Run Code Online (Sandbox Code Playgroud)
虽然最后两种方法比第一种方法运行的时间更快,但当我使用它们时,我得到的结果表明它们不是在球体表面上产生均匀的随机点,而是给出了有利于赤道的分布.
此外,最后两种方法给出相同的最终结果,但我确定它们是不正确的,因为我正在与分析解决方案进行比较.
我发现的每个参考都表明这些方法确实产生了均匀的分布但是我没有达到正确的结果.
我的实现中是否有错误,或者我在第二和第三种方法中错过了一个基本想法?
我最近从Angular 1转移到Angular 2并经常遇到试图检测对象属性变化的问题(以前通过$ watch完成的事情).
典型的用例是我将有一个可注入服务来维护一段数据,例如包含设置的对象:
@Injectable()
export class SettingsService
{
_settings = {
'settingA' : true,
'settingB' : false
}
...
get settings()
{
return this._settings;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将在Ionic应用程序中有一个组件,例如设置页面,它将从设置服务获取设置:
constructor(private settingsService : SettingsService)
{
this.settings = settingsService.settings;
}
Run Code Online (Sandbox Code Playgroud)
并将对象属性直接耦合到UI组件,如切换.问题不仅仅是在每个切换更改事件上调用一个函数,服务或组件如何知道设置对象已更改以触发适当的操作,如将设置保存到数据存储?
有没有办法让用户不能编辑UITextField,只提供没有子类化的复制菜单?即,当触摸文本字段时,它会自动选择所有文本并仅显示复制菜单.
如果可能的话,在没有子类化的情况下执行此操作需要选择哪些接口构建器选项?
提前致谢.
我有一个Laravel网络应用程序,用户可以在其中上传文件.这些文件可能很敏感,虽然它们存储在S3上,但只能通过我的网络服务器访问(流下载).上传后,用户可能希望下载这些文件的选择.
以前,当用户下载一系列文件时,我的Web服务器会从S3下载文件,在本地压缩,然后将zip发送到客户端.但是,由于文件大小一旦投入生产,服务器响应会经常超时.
作为一种替代方法,我想通过ZipStream动态压缩文件,但我没有太多运气.zip文件最终会损坏文件,或者自身损坏并且非常小.
如果可以将S3上的文件的流资源传递给ZipStream,解决超时问题的最佳方法是什么?
我尝试了几种方法,我最近的两种方法如下:
// First method using fopen
// Results in tiny corrupt zip files
if (!($fp = fopen("s3://{$bucket}/{$key}", 'r')))
{
die('Could not open stream for reading');
}
$zip->addFileFromPath($file->orginal_filename, "s3://{$bucket}/{$key}");
fclose($fp);
// Second method tried get download the file from s3 before sipping
// Results in a reasonable sized zip file that is corrupt
$contents = file_get_contents("s3://{$bucket}/{$key}");
$zip->addFile($file->orginal_filename, $contents);
Run Code Online (Sandbox Code Playgroud)
每个都位于一个遍历每个文件的循环中.在循环之后我调用$ zip-> finish().
注意我没有得到任何PHP错误只是损坏文件.
我有一个由 Laravel 驱动的 api,本地托管在http://tenant.api.hydrogen.local上,还有一个 Angular 9.2 SPA,在http://localhost:8100上提供服务。我最近安装了 Laravel Sanctum 进行身份验证,并按照文档中列出的 SPA 说明进行操作,但 CSRF 令牌未附加到来自 SPA 的请求,因此我收到 CSRF 令牌不匹配错误。
//abc.api.hydrogen.local/sanctum/csrf
按照指示,我在随后尝试登录之前进行初始调用:
this.http.get('sanctum/csrf-cookie')
.pipe(
switchMap(result => this.http.post('auth/login', {'email': email, 'password': password}))
);
Run Code Online (Sandbox Code Playgroud)
注意:我有一个拦截器,它在请求 url 前面加上 api url '//abc.api.hydrogen.local/',例如 'sanctum/csrf-cookie' 将变为 '//abc.api.hydrogen.local/sanctum/ csrf-cookie'
来自 sainttum/csrf-cookie 的响应与预期的标头一起返回:
Access-Control-Allow-Credentials: true
Set-Cookie: XSRF-TOKEN=eyJpdiI6Ilc3UkRLR1BSZ29TWVh3ZWZEQ3Y4aGc9PSIsInZhbHVlIjoiRUZBZXNFWTlZbWo5QWhIeWsrRmpjNUZVWkExSGtaT1hzUTVnSXpoaGQ4c3dFc2VLNjZsUHlUVWFmbG1uVVdKZSIsIm1hYyI6ImU1ZTAxNGFmMjAwNWRiMDhiODFjMGZhYTljYmU1NmRjYTUzYTNmNDJjNWM3YmQyM2FkY2I2OGYwNjYzNGU2MjkifQ%3D%3D; expires=Thu, 30-Apr-2020 13:35:06 GMT; Max-Age=7200; path=/; domain=localhost
Access-Control-Allow-Origin: http://localhost:8100
Run Code Online (Sandbox Code Playgroud)
但是,当我查看浏览器控制台时,我没有看到存储 > cookie 中设置任何内容。此外,后续调用“login/”时没有附加 cookie,并且我收到 CSRF 令牌不匹配错误。
我阅读了许多详细介绍类似问题的帖子,并实施了他们的建议和配置,包括以下内容:
假设我在AngularJS Web应用程序中有一个控制器,它有一个数据数组,用于存储非常相似的对象,但需要一个不同的模板,具体取决于成员变量'type'.例如 :
function fooCtrl($scope) {
$scope.bar = [
{"name": "example 1",
"type": "egType1",
"text": "Some example text"},
{"name": "example 2",
"type": "egType2",
"text": "Some example text"},
{"name": "example 3",
"type": "egType3",
"text": "Some example text"},
];
}
Run Code Online (Sandbox Code Playgroud)
可以使用ng-repeat指令轻松创建模板以输出数据,如下所示:
<ul>
<li ng-repeat="item in bar">
{{item.name}}
<p>{{item.text}}</p>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
然而,这将导致每个项目具有相同的显示.
输出bar中所有项目的最佳方法是什么,同时能够根据item.type的值更改模板?
我正在开发一系列实用程序应用程序,其中每个应用程序都可以在台式机,移动设备和网络上使用。经过研究后,我决定在客户端上使用pouchdb并在服务器上使用couchdb来提供脱机同步。
用户将能够在网络上创建一个帐户(Laravel Spark应用程序)来管理他们的应用程序订阅/付款,还可以访问应用程序的网络版本。在移动设备和台式机上,用户将使用其凭据登录每个应用程序以解锁功能。
我打算在经过过滤的复制(基于文件所属的应用程序)中在ouchdb中采用每用户数据库方法。基本要求是用户可以在应用程序中登录一次,然后再永久安全地复制到benchdb(直到注销)。
鉴于以下概述的用例,采用长沙发进行身份验证的最佳方法是什么?
在我的vagrant配置脚本结束时,我尝试使用以下命令安装composer:
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Run Code Online (Sandbox Code Playgroud)
但是,当执行此操作时,我会收到以下错误:
SlowTimer [5612ms] at curl: https://getcomposer.org/composer.phar
Download failed: Failed to open https://getcomposer.org/composer.phar (Resolving timed out after 5613 milliseconds)
The download failed repeatedly, aborting.
Run Code Online (Sandbox Code Playgroud)
如果我安装了php而不是hhvm并在我的vagrant vm上运行相同的命令,则安装成功,这表明hhvm不兼容.但是我也有一个运行Ubuntu 14.04和hhvm(没有php)的Linode,并且可以使用这些命令安装composer而没有任何问题.
鉴于我可以在我的Linode上使用类似的环境安装composer,为什么它在我的vagrant vm上失败了,我该如何纠正这个?
如何使用SSE内在函数创建一个掩码,指示两个打包浮点(__m128)的符号是否相同,例如比较a和b,其中a为[1.0 -1.0 0.0 2.0],b为[1.0 1.0 1.0 1.0]我们得到的所需面具是[true false true true].
我已经开始使用SSE优化我的代码.基本上它是一个光线跟踪器,通过在__m128数据类型x,y,z中存储坐标,一次处理4条光线(四条光线的坐标按轴分组).但是,我有一个分支语句,可以防止除以零,我似乎无法转换为SSE.连续这是:
const float d = wZ == -1.0f ? 1.0f/( 1.0f-wZ) : 1.0f/(1.0f+wZ);
Run Code Online (Sandbox Code Playgroud)
其中wZ是z坐标,需要对所有四条射线进行计算.
我怎么能把它翻译成SSE?
我一直在尝试使用SSE等于比较如下(现在wz属于__m128数据类型,包含四条光线中每条光线的z值):
_mm_cmpeq_ps(_mm_set1_ps(-1.0f) , wZ )
Run Code Online (Sandbox Code Playgroud)
然后使用它来识别wZ [x] = -1.0的情况,取这个情况的绝对值,然后继续计算正常.
但是,我在这方面没有取得多大成功.
c++ ×3
angular ×2
intrinsics ×2
laravel ×2
sse ×2
amazon-s3 ×1
angularjs ×1
composer-php ×1
couchdb ×1
geometry ×1
hhvm ×1
ios ×1
iphone ×1
javascript ×1
math ×1
objective-c ×1
php ×1
pouchdb ×1
random ×1
ubuntu ×1
ubuntu-14.04 ×1
vagrant ×1
zipfile ×1