- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
它不起作用,我竭尽全力修复它,但每次我得到的答案都是一样的。我的功能如我所见,运行良好。但是当我尝试在 for 循环中将它们相乘时,它不起作用,我得到大量的零..
我已经花了 5 天多的时间来解决这个问题,我不想在函数中更改我的数组,但如果它不会修复,那么我会删除数组,并添加更多函数
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void) {
int noktalar[4][4][3] = {
{ {30, 50, 1}, {130, 40, 1}, {200, 40, 1}, {240, 45, 1} },
{ {35, 90, 1}, {100, 95, 1}, {220, 95, 1}, {245, 90, 1} },
{ {25, 160, 1}, {80, 170, 1}, {240, 150, 1}, {260, 140, 1} },
{ {30, 250, 1}, {130, 200, 1}, {220, 220, 1}, {300, 300, 1} }};
int i, j, a, b, k = 1;
float X, Y, Z;
float tX = 0, tY = 0, tZ = 0;
for (a = 0; a <= 10; a++) {
for (b = 0; b <= 10; b++) {
for (i = 0; i <= 3; i++) {
for (j = 0; j <= 3; j++) {
X = bezierx(a, b, i, j) * noktalar[i][j][2];
Y = beziery(a, b, i, j) * noktalar[i][j][2]; // this part doesnt work well...
Z = bezierz(a, b, i, j) * noktalar[i][j][2];
}//--j for--
}//--i for--
printf("%d::::: %f -- %f -- %f \n", k, X, Y, Z);
k++;
}// --b for--
}// --a for--
getch();
return 0;
}
// -----------------main-------------------
int bezierx(int a, int b, int i, int j) {
float Xx;
float u = (float)a / 10, w = (float)b / 10;
float Uu = 1 - u, Ww = 1 - w;
float uu[4] = { (float)pow(Uu, 3), (float)(3 * pow(Uu, 2) * u), (float)(3 * Uu * pow(u, 2)), (float)pow(u, 3) };
float ww[4] = { (float)pow(Ww, 3), (float)(3 * pow(Ww, 2) * w), (float)(3 * Ww * pow(w, 2)), (float)pow(w, 3) };
Xx = uu[i] * ww[j];
// printf(" x : %f -- \n ", Xx);
return (float)Xx;
}
int beziery(int a, int b, int i, int j) {
float Yx;
float u = (float)a / 10, w = (float)b / 10;
float Uu = 1 - u, Ww = 1 - w;
float uu[4] = { (float)pow(Uu, 3), (float)(3 * pow(Uu, 2) * u), (float)(3 * Uu * pow(u, 2)), (float)pow(u, 3) };
float ww[4] = { (float)pow(Ww, 3), (float)(3 * pow(Ww, 2) * w), (float)(3 * Ww * pow(w, 2)), (float)pow(w, 3) };
Yx = uu[i] * ww[j];
// printf("y : %f -- ", Yx);
return (float)Yx;
}
int bezierz(int a, int b, int i, int j) {
float Zx;
float u = (float)a / 10, w = (float)b / 10;
float Uu = 1 - u, Ww = 1 - w;
float uu[4] = { (float)pow(Uu, 3), (float)(3 * pow(Uu, 2) * u), (float)(3 * Uu * pow(u, 2)), (float)pow(u, 3) };
float ww[4] = { (float)pow(Ww, 3), (float)(3 * pow(Ww, 2) * w), (float)(3 * Ww * pow(w, 2)), (float)pow(w, 3) };
Zx = uu[i] * ww[j];
// printf("z : %f \n", Zx);
return (float)Zx;
}
最佳答案
您必须将 bezierx
和 friend 定义为返回 float
并且要么在 main
函数之前声明它们,要么将它们的定义移动到 之前主要
函数。
请注意,您可以简化代码并且应该使用double
精度算法而不是float
来免费提高精度。对于这些简单的整数幂,最好编写 x*x
和 x*x*x
而不是使用 pow
以避免精度损失。
仔细阅读可以看出,bezierx
、beziery
和bezierz
没有区别。使用相同的功能。
修改后的版本:
#include <stdio.h>
#include <conio.h>
#include <math.h>
double bezier(int a, int b, int i, int j);
int main(void) {
int noktalar[4][4][3] = {
{ {30, 50, 1}, {130, 40, 1}, {200, 40, 1}, {240, 45, 1} },
{ {35, 90, 1}, {100, 95, 1}, {220, 95, 1}, {245, 90, 1} },
{ {25, 160, 1}, {80, 170, 1}, {240, 150, 1}, {260, 140, 1} },
{ {30, 250, 1}, {130, 200, 1}, {220, 220, 1}, {300, 300, 1} }};
int i, j, a, b, k = 1;
double X, Y, Z;
double tX = 0, tY = 0, tZ = 0;
for (a = 0; a <= 10; a++) {
for (b = 0; b <= 10; b++) {
for (i = 0; i <= 3; i++) {
for (j = 0; j <= 3; j++) {
X = bezier(a, b, i, j) * noktalar[i][j][0];
Y = bezier(a, b, i, j) * noktalar[i][j][1];
Z = bezier(a, b, i, j) * noktalar[i][j][2];
}
}
printf("%d::::: %f -- %f -- %f \n", k, X, Y, Z);
k++;
}
}
getch();
return 0;
}
double bezier(int a, int b, int i, int j) {
double Xx;
double u = a / 10.0, w = b / 10.0;
double Uu = 1 - u, Ww = 1 - w;
double uu[4] = { Uu * Uu * Uu, 3 * Uu * Uu * u, 3 * Uu * u * u, u * u * u };
double ww[4] = { Ww * Ww * Ww, 3 * Ww* Ww * w, 3 * Ww * w * w, w * w * w };
Xx = uu[i] * ww[j];
//printf(" bezier : %f -- \n ", Xx);
return Xx;
}
代码应该进一步简化:bezier
计算 8 个系数,其中只有 2 个用于最终结果。
关于c - 乘法在 for 循环中不能很好地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34369711/
下类时合上笔记本电脑。当我回到家并打开它时,它已重新启动。现在,当我打开 Titanium Developer 时,它会立即崩溃。 所以我现在也打不开。关于如何调试或找出问题所在的任何想法? 甚至尝试
我们想共享运行时项目二进制文件。所以每个团队成员都可以使用当前的工作版本。 在 SVN 中存储运行时二进制文件是否可以接受/很好? 最佳答案 不,不要将二进制文件存储在其源代码旁边(除非您有充分的理由
我在 PHP 中使用循环来显示 CMS 管理部分中的用户数据。每行(用户)都包含一些我想要连接到命令的图标(例如:编辑、删除等)。表的最后一行有空的输入字段,带有单个图标(命令),以允许添加新用户。这
如果这是一个新手问题,请原谅我,我昨天开始学习 Django,并且我尽量不要养成坏习惯,即我试图从一开始就以“django 方式”做事。 我有一个 View 接收二进制数据作为 http post 字
使用 swift 2.1 我正在寻找一种将非可选类型数组分配给可选类型数组的好方法,其中类型相同。这是我尝试过的一些方法: var foos: [Int?] = [] let bars: [Int]
James Gosling,加拿大计算机科学家,完成了 Java 的原始设计,并实现了 Java 最初版本的编译器和虚拟机,也是公认的 “Java 之父”。 Evrone 是一家企业软件开发公司,
我在两个项目上使用 Twitter Bootstrap,一个是静态 HTML 网站,另一个是 Rails 应用程序。当我在桌面浏览器上测试网站时,调整大小有效。但是当我在手机 [Nokia E72]
我可以使用全日历。但我有一个侧边栏,用户可以折叠它,然后内容框会变大,但是当用户这样做时,日历就不那么好了。 所以我正在考虑窗口调整大小功能,但这仅在浏览器窗口更改时才有效,那么当容器变大或变小时如何
我正在尝试使用 C# 和 LINQ 在数据库中查询每日活跃用户。我有一个运行良好的 SQL 查询。它在 u.UserId).Distinct().Count() } 测试后,当我必须选择 (
我目前正在开发部署目标为 7.1 的 iOS 应用程序。我的大部分测试都是在 iOS8 环境中执行的,没有任何问题。我连接了一个 iOS7 (5s) 测试设备,发现通过手机显示的 View 是 3.5
我有这样的代码: Floating left. Floating right. BlahBlah Container 允许我将页脚推到页面底部,但如果我想让左右栏跨越接触页脚的高度
从 PHP4 和 Cake 1.3 开始,我一直在使用 debug($data);在 CakePHP 中调试诸如模型输出之类的东西。 但是,自从升级到 PHP5.4 后,我注意到 debug($dat
我在Canvas上画我的游戏,一切都是上帝,但我把它改成了JPanel,但现在它不能正常工作,这是代码,你可以复制它们,你就会看到问题出在哪里(我有一个菜单,单击按钮后它应该创建新线程,我想在那里画画
我尝试用 scrapy 抓取一页。我用 FireXpath(一个 firefox 插件)找到了 xpath,它看起来不错。但是对于 Scrapy,我没有得到任何结果。 我的 python 程序如下所示
我想在页面加载时加载 fancybox。它工作正常,但我对它的高度有疑问。假设页面的高度为 3000px,而 fancybox 的高度为 1500px。如果你想看到页面的最低部分,都应该向下滚动。不幸
IE 大小调整问题!?代码非常简单:我有一个 div,我想要一个占 DIV 100% 的文本框。它必须显示 div 的红线(如果我使用 height:100%, width:100% 它会侵 ecli
我有一组看起来像这样的代码: if(self.property == A) { [self.infoManager getThingA:^(NSString *thing, NSError *
我认为 git clone 使用 STDERR。 我现在想将它重定向到 STDOUT 以使用此 hack . 我遇到了一些问题(另外,我使用很棒的 stderred 库自动将 STDERR 着色为红色
我的问题是我的表单正在提交(到节点/express api),如果我console.log req.body(@ api),结果是一个空对象。但是,如果我在客户端上 console.log ,则序列化
我对 addon-sdk 还很陌生,并且遇到了一个对我来说无法解释的问题。到目前为止,我一直在使用 jpm run 来测试一切 - 并且一切都很好。现在,我即将完成我想要完成的任务,所以我想在“普通”
我是一名优秀的程序员,十分优秀!