0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
1

В цилиндр вписана n-сторонняя призма

02.10.2018, 19:42. Показов 1429. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В циллиндр вписана n-сторонняя призма. n задается пользователем. Есть ли примеры подобных программ? С чего лучше начать и чем пользоваться?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2018, 19:42
Ответы с готовыми решениями:

Окружность вписана в трапецию
Дана равнобедренная трапеция, её площадь равна 125. В трапецию вписана окружность так, что...

Размеры прямоугольника в который вписана дуга
Размеры прямоугольника в который вписана дуга. Здравствуйте. Имеется система координат в...

Средняя линия трапеции в которую вписана окружность
Дана равнобедренная трапеция ABCD с основаниями AD и BC (AD>BC) которая описана около окружности с...

Призма
1) Объем куба = 12. Найдите объем треугольной призмы, отсекаемой от него плоскостью, проходящей...

14
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
02.10.2018, 20:16 2
Как это должно выглядеть? Просто линии или там 3D какое?
0
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
03.10.2018, 07:27  [ТС] 3
ТабуретY, 3D должо быть
0
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
03.10.2018, 10:35 4
Тогда pyqt, там есть opengl-widget, сделать не сложно
1
Эксперт Python
4607 / 2028 / 359
Регистрация: 17.03.2012
Сообщений: 10,086
Записей в блоге: 6
03.10.2018, 16:21 5
Есть разные инструменты, в зависимости от того, что вам нужно.
Простые вещи и в обычном matplotlib можно нарисовать. Для крутой графики игрового уровня есть Panda3d.
1
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
08.10.2018, 07:50  [ТС] 6
ТабуретY,
dondublon,

Вроде разобрался и сделал без opengl. Но теперь нужно добавить любое простое освещение(чтобы можно было менять его параметры и задавать отражающие свойства материала). Правильно ли я понимаю, что тут без opengl уже никак?
0
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
08.10.2018, 15:27 7
Цитата Сообщение от steelo Посмотреть сообщение
Правильно ли я понимаю, что тут без opengl уже никак?
С opengl проще намного, включил свет задал материал и все, но если хорошо знаете математику, то можно упороться и самому сделать, определить нормаль к точкам на цилиндре, рассчитать угол между лучом света и нормалью для каждой точки, и задать цвет в зависимости от принятого материала

Добавлено через 33 минуты
Пример с opengl, освещенная сфера, opengl брать отсюда https://www.lfd.uci.edu/~gohlk... /#pyopengl

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
import sys
 
name = 'ball_glut'
 
def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
    glutInitWindowSize(400,400)
    glutCreateWindow(name)
 
    glClearColor(0.,0.,0.,1.)
    glShadeModel(GL_SMOOTH)
    glEnable(GL_CULL_FACE)
    glEnable(GL_DEPTH_TEST)
    glEnable(GL_LIGHTING)
    glEnable(GL_COLOR_MATERIAL)
    lightZeroPosition = [10.,4.,10.,1.]
    lightZeroColor = [1.0,1.0,1.0,1.0] #green tinged
    glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition)
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor)
    glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1)
    glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05)
    glEnable(GL_LIGHT0)
    full_array  = [1.0, 1.0, 1.0, 1.0]
    glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, full_array)
    #glColor3f(0.8, 0.2, 0.8) #цвет материала
    glutDisplayFunc(display)
    glMatrixMode(GL_PROJECTION)
    gluPerspective(40.,1.,1.,40.)
    glMatrixMode(GL_MODELVIEW)
    gluLookAt(0,0,10,
              0,0,0,
              0,1,0)
    glPushMatrix()
    glutMainLoop()
    return
 
def display():
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    glPushMatrix()
    color = [1.0,0.,0.,1.]
    glMaterialfv(GL_FRONT,GL_DIFFUSE,color)
    glutSolidSphere(2,20,20)
    glPopMatrix()
    glutSwapBuffers()
    return
 
if __name__ == '__main__': main()
1
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
09.10.2018, 21:00  [ТС] 8
ТабуретY, Допустим я все же решил запариться с математикой:
Пусть центр нижей окружности цилиндра расположен в (0,0,0), Высота цилиндра = 1.
Уравнение кругового цилиндра https://www.cyberforum.ru/cgi-bin/latex.cgi?x^2+y^2=1
Нормаль к точке (a,b,c) вычисляется https://www.cyberforum.ru/cgi-bin/latex.cgi? \frac{x-a}{2a} = \frac{y-b}{2b} = \frac{z-c}{0}
Значение точки "a" ограниченны -1/2<= a <=1 (по оси Х)
Значение точки "b" ограниченны -1/2<= b <=1 (по оси Y)
Значение точки "c" ограниченны 0 <= c <= 1 (по оси Z)
Получается, что нужно для "a" от -1/2 до 1, с шагом в 0,1(к примеру) перебрать все b и c, вычислить угол с наперед заданным лучем. И исходя из этого менять интенсивность цвета(с окраской пока не сильно разобрался)?
0
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
09.10.2018, 23:14 9
Примерно так, проще даже не с самим лучом, с плоскостью перпендикуляной лучу, если источник света расположен прямо перед цилиндром, то на самой выпуклой части цилиндра будет полоса сверху вниз у которой цвет (255,255,255), то есть полностю белый, а у точек по бокам перпендиеуляр будет по углом к плоскости, ерем косинус и умножаем каждое число цвета на него и они будут чуть темнее и т.д.
0
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
11.10.2018, 19:44  [ТС] 10
ТабуретY, А вы не подскажете какой функцией менять цвет у поверхности? До сип пор не могу разобратся как это делать.
0
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
11.10.2018, 19:53 11
А как вы сделали вывод цилиндра? Вы же не написали
0
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
11.10.2018, 19:56  [ТС] 12
ТабуретY,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Построение цилиндра
x=np.linspace(-1, 1, 100)
z=np.linspace(0, 1, 100)
Xc, Zc=np.meshgrid(x, z)
Yc = np.sqrt(1-Xc**2)
 
rstride = 20
cstride = 10
ax.plot_surface(Xc, Yc, Zc, alpha=0.2,linewidth=0)
ax.plot_surface(Xc, -Yc, Zc, alpha=0.2,linewidth=0)
 
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
0
1289 / 906 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
11.10.2018, 20:03 13
Лучший ответ Сообщение было отмечено steelo как решение

Решение

Цвет можно задавать несколькими способами

В справке есть примеры https://matplotlib.org/mpl_too... face-plots
1
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
11.10.2018, 20:23  [ТС] 14
ТабуретY, Благодарю!
0
0 / 0 / 0
Регистрация: 07.09.2018
Сообщений: 15
12.10.2018, 12:45  [ТС] 15
ТабуретY, а можно ли как-то закрасить заднюю стенку(от черного до черного). Решил попробовать как в примере и получилось


код
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
X = np.arange(-0.5, 0.5, 0.01)
xlen = len(X)
Y = np.arange(-0.5, 0.5, 0.01)
ylen = len(Y)
 
 
 
X, Y = np.meshgrid(X, Y)
 
colortuple = ('y', 'b')
colors = np.empty(X.shape, dtype=str)
 
for y in range(ylen):
    for x in range(xlen):
    colors[x, y] = colortuple[(x + y)% 2] 
    print(x,y,colors[x, y])
 
#Построение цилиндра
x=np.linspace(-1, 1, 100)
z=np.linspace(0, 1, 100)
Xc, Zc=np.meshgrid(x, z)
Yc = np.sqrt(1-Xc**2)
 
rstride = 20
cstride = 10
ax.plot_surface(Xc, Yc, Zc,facecolors=colors, alpha=0.9,linewidth=0)
ax.plot_surface(Xc, -Yc, Zc,facecolors=colors, alpha=0.9,linewidth=0)
Миниатюры
В цилиндр вписана n-сторонняя призма  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2018, 12:45
Помогаю со студенческими работами здесь

призма
доброго времени суток, ребятки до завтра край задачу решить надо,большая просьба помочь! Показать,...

Найти площадь в треугольнике, которую занимает вписана окружность. С++
Нужно найти площадь треугольника, используя дружеский класс. Почти все сделал, но понятия не имею,...

Окружность вписана в квадрат. Найти диагонали и периметр квадрата
Сделать на паскале:Окружность с радиусом R вписана в квадрат .найти диагонали и периметр квадрата

Найти площадь выпуклого четырехугольника, в который вписана окружность
Всем привет. Девушке нужно решить несколько задач в делфи, сама не может - обратилась ко мне. Сам с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru